155 |
#ifdef SECURE_MAN_UID |
#ifdef SECURE_MAN_UID |
156 |
extern uid_t ruid; |
extern uid_t ruid; |
157 |
extern uid_t euid; |
extern uid_t euid; |
|
#ifdef MAN_DB_UPDATES |
|
|
# define DO_CHOWN |
|
|
#endif /* MAN_DB_UPDATES */ |
|
158 |
#endif /* SECURE_MAN_UID */ |
#endif /* SECURE_MAN_UID */ |
159 |
|
|
160 |
extern char *optarg; |
extern char *optarg; |
274 |
#endif /* NDBM */ |
#endif /* NDBM */ |
275 |
} |
} |
276 |
|
|
277 |
#ifdef DO_CHOWN |
#ifdef SECURE_MAN_UID |
278 |
/* chown() with error checking */ |
/* chown() with error checking */ |
279 |
static __inline__ void xchown (const char *path, uid_t owner, uid_t group) |
static __inline__ void xchown (const char *path, uid_t owner, uid_t group) |
280 |
{ |
{ |
298 |
xchown (xfile, uid, -1); |
xchown (xfile, uid, -1); |
299 |
# endif /* NDBM */ |
# endif /* NDBM */ |
300 |
} |
} |
301 |
#endif /* DO_CHOWN */ |
#endif /* SECURE_MAN_UID */ |
302 |
|
|
303 |
/* Update a single file in an existing database. */ |
/* Update a single file in an existing database. */ |
304 |
static short update_one_file (const char *manpath, char *filename) |
static short update_one_file (const char *manpath, char *filename) |
428 |
char *cwd = wd; |
char *cwd = wd; |
429 |
#endif /* __profile__ */ |
#endif /* __profile__ */ |
430 |
|
|
431 |
#ifdef DO_CHOWN |
#ifdef SECURE_MAN_UID |
432 |
struct passwd *man_owner; |
struct passwd *man_owner; |
433 |
#endif |
#endif |
434 |
|
|
505 |
init_security (); |
init_security (); |
506 |
#endif /* SECURE_MAN_UID */ |
#endif /* SECURE_MAN_UID */ |
507 |
|
|
508 |
#ifdef DO_CHOWN |
#ifdef SECURE_MAN_UID |
509 |
man_owner = getpwnam (MAN_OWNER); |
man_owner = getpwnam (MAN_OWNER); |
510 |
if (man_owner == NULL) |
if (man_owner == NULL) |
511 |
error (FAIL, 0, |
error (FAIL, 0, |
513 |
MAN_OWNER); |
MAN_OWNER); |
514 |
if (!user && euid != 0 && euid != man_owner->pw_uid) |
if (!user && euid != 0 && euid != man_owner->pw_uid) |
515 |
user = 1; |
user = 1; |
516 |
#endif /* DO_CHOWN */ |
#endif /* SECURE_MAN_UID */ |
517 |
|
|
518 |
|
|
519 |
/* This is required for get_catpath(), regardless */ |
/* This is required for get_catpath(), regardless */ |
584 |
|
|
585 |
if (!opt_test) { |
if (!opt_test) { |
586 |
finish_up (); |
finish_up (); |
587 |
#ifdef DO_CHOWN |
#ifdef SECURE_MAN_UID |
588 |
if (global_manpath && euid == 0) |
if (global_manpath && euid == 0) |
589 |
do_chown (man_owner->pw_uid); |
do_chown (man_owner->pw_uid); |
590 |
#endif |
#endif /* SECURE_MAN_UID */ |
591 |
} else |
} else |
592 |
cleanup (NULL); |
cleanup (NULL); |
593 |
pop_cleanup (); |
pop_cleanup (); |