bool is_subbed_in(int fd, const char *address);
enum subtype is_subbed(struct mlmmj_list *list, const char *address, int both);
int open_subscriber_directory(struct mlmmj_list *list, enum subtype typesub, const char **subdir);
+void change_uid(struct mlmmj_list *list);
#endif /* SUBSCRIBERFUNC_H */
int nogensubscribed = 0;
int force = 0, quiet = 0, i = 0;
enum subtype subbed;
- struct stat st;
pid_t pid, childpid = 0;
- uid_t uid;
enum subtype typesub = SUB_NORMAL;
enum subreason reasonsub = SUB_ADMIN;
exit(EXIT_SUCCESS); /* XXX is this success? */
}
- if(changeuid) {
- uid = getuid();
- if(!uid && stat(list.dir, &st) == 0) {
- printf("Changing to uid %d, owner of %s.\n",
- (int)st.st_uid, list.dir);
- if(setuid(st.st_uid) < 0) {
- perror("setuid");
- fprintf(stderr, "Continuing as uid %d\n",
- (int)uid);
- }
- }
- }
+ if(changeuid)
+ change_uid(&list);
subbed = is_subbed(&list, address, 1);
char *lowcaseaddr;
enum subtype typesub = SUB_ALL;
enum subreason reasonsub = SUB_ADMIN;
- uid_t uid;
- struct stat st;
pid_t pid, childpid;
mlmmj_list_init(&list);
}
address = lowcaseaddr;
- if(changeuid) {
- uid = getuid();
- if(!uid && stat(list.dir, &st) == 0) {
- printf("Changing to uid %d, owner of %s.\n",
- (int)st.st_uid, list.dir);
- if(setuid(st.st_uid) < 0) {
- perror("setuid");
- fprintf(stderr, "Continuing as uid %d\n",
- (int)uid);
- }
- }
- }
+ if(changeuid)
+ change_uid(&list);
if (typesub == SUB_ALL) {
subbed = is_subbed(&list, address, 0) != SUB_NONE;
err(EXIT_FAILURE, "Unable to open %s/%s", list->dir, *subdir);
return (fd);
}
+
+void
+change_uid(struct mlmmj_list *list)
+{
+ struct stat st;
+ uid_t uid;
+
+ uid = getuid();
+ if (!uid && fstat(list->fd, &st) == 0) {
+ printf("Changing to uid %d, owner of %s.\n",
+ (int)st.st_uid, list->dir);
+ if(setuid(st.st_uid) < 0) {
+ perror("setuid");
+ fprintf(stderr, "Continuing as uid %d\n",
+ (int)uid);
+ }
+ }
+}