sel_addtimer(&sel, &it, &tvv, interval, v);
}
-/* --- @mystrieq@ --- *
- *
- * Arguments: @const char *x, *y@ = two strings
- *
- * Returns: True if @x@ and @y are equal, up to case.
- */
-
-int mystrieq(const char *x, const char *y)
-{
- for (;;) {
- if (!*x && !*y) return (1);
- if (tolower((unsigned char)*x) != tolower((unsigned char)*y))
- return (0);
- x++; y++;
- }
-}
-
/* --- @main@ --- *
*
* Arguments: @int argc@ = number of command line arguments
case 'D':
f |= f_daemon;
break;
- case 'U': {
- struct passwd *pw;
- char *p;
- unsigned long i = strtoul(optarg, &p, 0);
- if (!*p)
- pw = getpwuid(i);
- else
- pw = getpwnam(optarg);
- if (!pw)
- die(EXIT_FAILURE, "user `%s' not found", optarg);
- u = pw->pw_uid;
- if (g == -1)
- g = pw->pw_gid;
- } break;
- case 'G': {
- struct group *gr;
- char *p;
- unsigned long i = strtoul(optarg, &p, 0);
- if (!*p)
- gr = getgrgid(i);
- else
- gr = getgrnam(optarg);
- if (!gr)
- die(EXIT_FAILURE, "group `%s' not found", optarg);
- g = gr->gr_gid;
- } break;
+ case 'U':
+ u = u_getuser(optarg, &g);
+ break;
+ case 'G':
+ g = u_getgroup(optarg);
+ break;
case 'b': {
struct hostent *h = gethostbyname(optarg);
a_create(STDIN_FILENO, STDOUT_FILENO, AF_WARN);
#endif
}
- if (g != (gid_t)-1) {
- if (setgid(g) || (getuid() == 0 && setgroups(1, &g))) {
- die(EXIT_FAILURE, "couldn't setgid to %u: %s",
- (unsigned)g, strerror(errno));
- }
- }
- if (u != (uid_t)-1) {
- if (setuid(u)) {
- die(EXIT_FAILURE, "couldn't setuid to %u: %s",
- (unsigned)u, strerror(errno));
- }
- }
+ u_setugid(u, g);
km_init(kr_priv, kr_pub, tag_priv);
a_init(csock);
if (f & f_daemon) {