You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2011/07/21 02:14:50 UTC
svn commit: r1148985 - /trafficserver/traffic/trunk/cop/TrafficCop.cc
Author: amc
Date: Thu Jul 21 00:14:49 2011
New Revision: 1148985
URL: http://svn.apache.org/viewvc?rev=1148985&view=rev
Log:
Fix spurious "admin user string was empty" messages
Modified:
trafficserver/traffic/trunk/cop/TrafficCop.cc
Modified: trafficserver/traffic/trunk/cop/TrafficCop.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/cop/TrafficCop.cc?rev=1148985&r1=1148984&r2=1148985&view=diff
==============================================================================
--- trafficserver/traffic/trunk/cop/TrafficCop.cc (original)
+++ trafficserver/traffic/trunk/cop/TrafficCop.cc Thu Jul 21 00:14:49 2011
@@ -79,7 +79,10 @@ static char syslog_fac_str[PATH_MAX] = "
static int killsig = SIGKILL;
static int coresig = 0;
-static char admin_user[80];
+static char admin_user[256];
+static uid_t admin_uid;
+static gid_t admin_gid;
+static bool admin_user_p = false;
static char manager_binary[PATH_MAX] = "traffic_manager";
static char server_binary[PATH_MAX] = "traffic_server";
static char manager_options[OPTIONS_LEN_MAX] = "";
@@ -173,34 +176,16 @@ cop_log(int priority, const char *format
}
void
-chown_file_to_user(const char *file, const char *user)
-{
- struct passwd *pwd = NULL;
-
- if (user && *user) {
- if (*user == '#') {
- int uid = atoi(user + 1);
- if (uid == -1) {
- // XXX: Can this call hapen after setuid?
- uid = (int)geteuid();
- }
- pwd = getpwuid((uid_t)uid);
- } else {
- pwd = getpwnam(user);
+chown_file_to_admin_user(const char *file) {
+ if (admin_user_p) {
+ if (chown(file, admin_uid, admin_gid) < 0) {
+ cop_log(
+ COP_FATAL,
+ "cop couldn't chown the file: '%s' for '%s' (%d/%d) : [%d] %s\n",
+ file, admin_user, admin_uid, admin_gid,
+ errno, strerror(errno)
+ );
}
-
- if (pwd) {
- if (chown(file, pwd->pw_uid, pwd->pw_gid) < 0) {
- cop_log(
- COP_FATAL, "cop couldn't chown the file: '%s' [%d] %s\n",
- file, errno, strerror(errno)
- );
- }
- } else {
- cop_log(COP_FATAL, "can't get passwd entry for the admin user '%s' - [%d] %s\n", user, errno, strerror(errno));
- }
- } else {
- cop_log(COP_FATAL, "Admin user was the empty string.\n");
}
}
static void
@@ -377,7 +362,7 @@ static void
safe_kill(const char *lockfile_name, const char *pname, bool group)
{
Lockfile lockfile(lockfile_name);
- chown_file_to_user(lockfile_name, admin_user);
+ chown_file_to_admin_user(lockfile_name);
#ifdef TRACE_LOG_COP
cop_log(COP_DEBUG, "Entering safe_kill(%s, %s, %d)\n", lockfile_name, pname, group);
@@ -390,7 +375,7 @@ safe_kill(const char *lockfile_name, con
} else {
lockfile.Kill(killsig, coresig, pname);
}
- chown_file_to_user(lockfile_name, admin_user);
+ chown_file_to_admin_user(lockfile_name);
alarm(0);
set_alarm_death();
@@ -609,6 +594,35 @@ ConfigIntFatalError:
}
+bool
+get_admin_user() {
+ struct passwd *pwd = NULL;
+
+ read_config_string("proxy.config.admin.user_id", admin_user, sizeof(admin_user));
+
+ if (*admin_user) {
+ if (*admin_user == '#') {
+ int uid = atoi(admin_user + 1);
+ if (uid == -1) {
+ // XXX: Can this call hapen after setuid?
+ uid = (int)geteuid();
+ }
+ pwd = getpwuid((uid_t)uid);
+ } else {
+ pwd = getpwnam(admin_user);
+ }
+
+ if (pwd) {
+ admin_uid = pwd->pw_uid;
+ admin_gid = pwd->pw_gid;
+ admin_user_p = true;
+ } else {
+ cop_log(COP_FATAL, "can't get passwd entry for the admin user '%s' - [%d] %s\n", admin_user, errno, strerror(errno));
+ }
+ }
+ return admin_user_p;
+}
+
static void
read_config()
{
@@ -646,8 +660,8 @@ read_config()
fclose(fp);
read_config_string("proxy.config.manager_binary", manager_binary, sizeof(manager_binary), true);
- read_config_string("proxy.config.admin.user_id", admin_user, sizeof(admin_user));
read_config_string("proxy.config.proxy_binary", server_binary, sizeof(server_binary), true);
+ get_admin_user();
read_config_string("proxy.config.bin_path", bin_path, sizeof(bin_path), true);
Layout::get()->relative(bin_path, sizeof(bin_path), bin_path);
@@ -689,7 +703,6 @@ read_config()
#endif
}
-
static void
spawn_manager()
{
@@ -1422,7 +1435,7 @@ check_programs()
// it means there is no manager running.
Lockfile manager_lf(manager_lockfile);
err = manager_lf.Open(&holding_pid);
- chown_file_to_user(manager_lockfile, admin_user);
+ chown_file_to_admin_user(manager_lockfile);
#if defined(linux)
// if lockfile held, but process doesn't exist, killall and try again
if (err == 0) {
@@ -1642,8 +1655,8 @@ check(void *arg)
for (;;) {
// problems with the ownership of this file as root Make sure it is
// owned by the admin user
- chown_file_to_user(manager_lockfile, admin_user);
- chown_file_to_user(server_lockfile, admin_user);
+ chown_file_to_admin_user(manager_lockfile);
+ chown_file_to_admin_user(server_lockfile);
alarm(2 * (sleep_time + manager_timeout * 2 + server_timeout));