diff --git a/src/extra-tools/execl-subuidgid.c b/src/extra-tools/execl-subuidgid.c index 259c1ea9b939397b0dc2cd23f7de30767a640664..50a35602c0c9fe284dc2e8eb0a94349a067e68c1 100644 --- a/src/extra-tools/execl-subuidgid.c +++ b/src/extra-tools/execl-subuidgid.c @@ -15,6 +15,8 @@ #include <unistd.h> #include <sys/types.h> #include <stdio.h> +#include <errno.h> +#include <pwd.h> #include <oblibs/error2.h> #include <oblibs/environ.h> @@ -28,8 +30,6 @@ #include <skalibs/djbunix.h> #include <execline/execline.h> -#include <66/environ.h> -#include <66/utils.h> #define USAGE "execl-subuidgid [ -h ] [ -o owner ] prog..." @@ -47,6 +47,40 @@ static inline void info_help (void) strerr_diefu1sys(111, "write to stdout") ; } +/** Implement again this function coming from + * 66. This is avoid the dependency from it*/ +static int youruid(uid_t *passto,char const *owner) +{ + int e ; + e = errno ; + errno = 0 ; + struct passwd *st ; + if (!(st = getpwnam(owner)) || errno) + { + if (!errno) errno = EINVAL ; + return 0 ; + } + *passto = st->pw_uid ; + errno = e ; + return 1 ; +} + +static int yourgid(gid_t *passto,uid_t owner) +{ + int e ; + e = errno ; + errno = 0 ; + struct passwd *st ; + if (!(st = getpwuid(owner)) || errno) + { + if (!errno) errno = EINVAL ; + return 0 ; + } + *passto = st->pw_gid ; + errno = e ; + return 1 ; +} + int main (int argc, char const **argv, char const *const *envp) { uid_t uid ;