From a12ce44f6992d8249f779e95db730a9634571654 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 4 May 2003 07:00:44 +0000 Subject: Update. 2003-05-03 Ulrich Drepper * nscd/nscd.c (main): Parse config file right after parsing parameters. Then, if get_stats is true, call receive_print_stats. Drop parameter from nscd_init call. (get_stats): New variable. (parse_opt): Set get_stats, don't call receive_print_stats here. * nscd/nscd.h: Declare dbs, stat_user, and stat_uid. Adjust nscd_init prototype. * nscd/connections.c (stat_user, stat_uid): New variables. (dbs): Make global. (nscd_init): Don't read configuration file here. Drop parameter. (handle_request): Cleanup handling of non-database lookup requests. * nscd/nscd_conf.c (nscd_parse_file): Recognize stat-user entry. Get UID of the specified user. Use xstrdup instead of strdup. * nscd/nscd_stat.c (receive_print_stats): Check UID. If not zero, check stat_user. * nscd/Makefile (nscd-modules): Add xstrdup. * nscd/nscd.conf: Document stat-user entry. 2003-05-03 H.J. Lu * sysdeps/unix/sysv/linux/ia64/sysdep.h (__NR_semtimedop): Define if not defined. --- nscd/nscd_stat.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'nscd/nscd_stat.c') diff --git a/nscd/nscd_stat.c b/nscd/nscd_stat.c index 7cfde98..f04e197 100644 --- a/nscd/nscd_stat.c +++ b/nscd/nscd_stat.c @@ -114,6 +114,24 @@ receive_print_stats (void) ssize_t nbytes; int fd; int i; + uid_t uid = getuid (); + + /* Find out whether there is another user but root allowed to + request statistics. */ + if (uid != 0) + { + /* User specified? */ + if(stat_user == NULL || stat_uid != uid) + { + if (stat_user != NULL) + error (EXIT_FAILURE, 0, + _("Only root or %s is allowed to use this option!"), + stat_user); + else + error (EXIT_FAILURE, 0, + _("Only root is allowed to use this option!")); + } + } /* Open a socket to the running nscd. */ fd = nscd_open_socket (); -- cgit v1.1