-const char jcc_rcs[] = "$Id: jcc.c,v 1.342 2011/03/03 14:44:00 fabiankeil Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.350 2011/04/26 16:55:08 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jcc.c,v $
{
/*
* We were able to read a complete
- * header and can finaly enlist it.
+ * header and can finally enlist it.
*/
enlist(headers, p);
freez(p);
* this function is called (via serve()) to handle the
* main business of the communication. This function
* returns after dealing with a single request. It can
- * be called multiple times witht the same client socket
+ * be called multiple times with the same client socket
* if the client is keeping the connection alive.
*
* The decision whether or not a client connection will
csp->action->string[ACTION_STRING_LIMIT_CONNECT];
assert(NULL != acceptable_connect_ports);
log_error(LOG_LEVEL_INFO, "Request from %s marked for blocking. "
- "limit-connect{%s} doesn't allow CONNECT requests to port %d.",
- csp->ip_addr_str, acceptable_connect_ports, csp->http->port);
+ "limit-connect{%s} doesn't allow CONNECT requests to %s",
+ csp->ip_addr_str, acceptable_connect_ports, csp->http->hostport);
csp->action->flags |= ACTION_BLOCK;
http->ssl = 0;
}
else
{
rsp = error_response(csp, "connect-failed");
- log_error(LOG_LEVEL_CONNECT, "connect to: %s failed: %E",
- http->hostport);
}
/* Write the answer to the client */
#ifdef unix
struct passwd *pw = NULL;
struct group *grp = NULL;
- char *p;
int do_chroot = 0;
char *pre_chroot_nslookup_to_load_resolver = NULL;
#endif
else if (strcmp(argv[argc_pos], "--user" ) == 0)
{
+ char *user_arg;
+ char *group_name;
+
if (++argc_pos == argc) usage(argv[argc_pos]);
- if ((NULL != (p = strchr(argv[argc_pos], '.'))) && *(p + 1) != '0')
+ user_arg = strdup(argv[argc_pos]);
+ if (NULL == user_arg)
+ {
+ log_error(LOG_LEVEL_FATAL,
+ "Out of memory splitting --user argument '%s'.", argv[argc_pos]);
+ }
+ group_name = strchr(user_arg, '.');
+ if (NULL != group_name)
{
- *p++ = '\0';
- if (NULL == (grp = getgrnam(p)))
+ /* Nul-terminate the user name */
+ *group_name = '\0';
+
+ /* Skip the former delimiter to actually reach the group name */
+ group_name++;
+
+ grp = getgrnam(group_name);
+ if (NULL == grp)
{
- log_error(LOG_LEVEL_FATAL, "Group %s not found.", p);
+ log_error(LOG_LEVEL_FATAL, "Group '%s' not found.", group_name);
}
}
-
- if (NULL == (pw = getpwnam(argv[argc_pos])))
+ pw = getpwnam(user_arg);
+ if (NULL == pw)
{
- log_error(LOG_LEVEL_FATAL, "User %s not found.", argv[argc_pos]);
+ log_error(LOG_LEVEL_FATAL, "User '%s' not found.", user_arg);
}
- if (p != NULL) *--p = '\0';
+ freez(user_arg);
}
else if (strcmp(argv[argc_pos], "--pre-chroot-nslookup" ) == 0)
{
int child_id;
-/* this is a switch () statment in the C preprocessor - ugh */
+/* this is a switch () statement in the C preprocessor - ugh */
#undef SELECTED_ONE_OPTION
/* Use Pthreads in preference to native code */