Changeset 1042 for trunk/src/ifd
- Timestamp:
- 05/14/08 15:22:03 (4 years ago)
- Location:
- trunk/src/ifd
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ifd/init.c
r1009 r1042 62 62 ct_config.debug = ival; 63 63 64 if (ifd_conf_get_string("ifdhandler ", &sval) >= 0)64 if (ifd_conf_get_string("ifdhandler.program", &sval) >= 0) 65 65 ct_config.ifdhandler = sval; 66 66 -
trunk/src/ifd/utils.c
r964 r1042 14 14 #include <sys/stat.h> 15 15 #include <sys/wait.h> 16 #include <sys/types.h> 17 #include <pwd.h> 18 #include <grp.h> 16 19 17 20 #ifndef __GNUC__ … … 87 90 int argc, n; 88 91 pid_t pid; 92 char *user = NULL; 89 93 90 94 ifd_debug(1, "driver=%s, devtype=%s, index=%d", driver, devtype, idx); … … 141 145 while (--n > 2) 142 146 close(n); 147 148 if ((n = ifd_conf_get_string_list("ifdhandler.groups", NULL, 0)) > 0) { 149 char **groups = (char **)calloc(n, sizeof(char *)); 150 gid_t *gids = (gid_t *)calloc(n, sizeof(gid_t)); 151 int j; 152 if (!groups || !gids) { 153 ct_error("out of memory"); 154 exit(1); 155 } 156 n = ifd_conf_get_string_list("ifdhandler.groups", groups, n); 157 for (j = 0; j < n; j++) { 158 struct group *g = getgrnam(groups[j]); 159 if (g == NULL) { 160 ct_error("failed to parse group %s", groups[j]); 161 exit(1); 162 } 163 gids[j] = g->gr_gid; 164 } 165 if (setgroups(n-1, &gids[1]) == -1) { 166 ct_error("failed set groups %m"); 167 exit(1); 168 } 169 if (setgid(gids[0]) == -1) { 170 ct_error("failed setgid %d %m", gids[0]); 171 exit(1); 172 } 173 free(groups); 174 free(gids); 175 } 176 177 if (ifd_conf_get_string("ifdhandler.user", &user) >= 0) { 178 struct passwd *p = getpwnam(user); 179 180 if (p == NULL) { 181 ct_error("failed to parse user %s", user); 182 exit(1); 183 } 184 185 if (setuid(p->pw_uid) == -1) { 186 ct_error("failed to set*uid user %s %m", user); 187 exit(1); 188 } 189 } 143 190 144 191 execv(ct_config.ifdhandler, (char **)argv);
Note: See TracChangeset
for help on using the changeset viewer.
