* Let the reader beware.
*
* $Log$
- * Revision 1.11 1987-07-29 16:04:54 wesommer
- * Add keepalive feature.
+ * Revision 1.12 1987-08-04 01:50:00 wesommer
+ * Rearranged messages.
*
+ * Revision 1.11 87/07/29 16:04:54 wesommer
+ * Add keepalive feature.
+ *
* Revision 1.10 87/06/30 20:02:26 wesommer
* Added returned tuple chain to client structure.
* Added local realm global variable.
init_sms_err_tbl();
init_krb_err_tbl();
set_com_err_hook(sms_com_err);
-
+ setlinebuf(stderr);
+
if (argc != 1) {
com_err(whoami, 0, "Usage: smsd");
exit(1);
op_list = create_list_of_operations(1, listenop);
- (void) sprintf(buf1, "started (pid %d)", getpid());
- com_err(whoami, 0, buf1);
+ com_err(whoami, 0, "started (pid %d)", getpid());
com_err(whoami, 0, rcsid_sms_main_c);
/*
#ifdef notdef
fprintf(stderr, " tick\n");
#endif notdef
+ /*
+ * Handle any new connections; this comes first so
+ * errno isn't tromped on.
+ */
+ if (OP_DONE(listenop)) {
+ if (OP_STATUS(listenop) == OP_CANCELLED) {
+ if (errno == EWOULDBLOCK) {
+ do_reset_listen();
+ } else {
+ com_err(whoami, errno,
+ "error on listen");
+ exit(1);
+ }
+ } else if ((status = new_connection()) != 0) {
+ com_err(whoami, errno,
+ "Error on listening operation.");
+ /*
+ * Sleep here to prevent hosing?
+ */
+ }
+ }
/*
* Handle any existing connections.
*/
cur_client = NULL;
if (takedown) break;
}
- /*
- * Handle any new connections.
- */
- if (OP_DONE(listenop)) {
- if (OP_STATUS(listenop) == OP_CANCELLED) {
- com_err(whoami, errno, "Error on listen");
- exit(1);
-
- } else if ((status = new_connection()) != 0) {
- com_err(whoami, errno,
- "Error on listening operation.");
- /*
- * Sleep here to prevent hosing?
- */
- }
- }
}
- com_err(whoami, 0, takedown);
+ com_err(whoami, 0, "%s", takedown);
sms_close_database();
return 0;
}
return 0;
}
+
+do_reset_listen()
+{
+ client_addrlen = sizeof(client_addr);
+ start_accepting_client(listencon, listenop, &newconn,
+ (char *)&client_addr,
+ &client_addrlen, &client_tuple);
+}
+
/*
* This routine is called when a new connection comes in.
*
* Log new connection.
*/
- (void) sprintf(buf1,
- "New connection from %s port %d (now %d client%s)",
- inet_ntoa(cp->haddr.sin_addr),
- (int)ntohs(cp->haddr.sin_port),
- nclients,
- nclients!=1?"s":"");
- com_err(whoami, 0, buf1);
+ com_err(whoami, 0, "New connection from %s port %d (now %d client%s)",
+ inet_ntoa(cp->haddr.sin_addr),
+ (int)ntohs(cp->haddr.sin_port),
+ nclients,
+ nclients!=1?"s":"");
/*
* Get ready to accept the next connection.
* Copyright (C) 1987 by the Massachusetts Institute of Technology
*
* $Log$
- * Revision 1.8 1987-07-29 16:02:48 wesommer
- * Use unsigned char rather than char to prevent sign extension
- * problem.
+ * Revision 1.9 1987-08-04 01:50:13 wesommer
+ * Rearranged messages.
*
+ * Revision 1.8 87/07/29 16:02:48 wesommer
+ * Use unsigned char rather than char to prevent sign extension
+ * problem.
+ *
* Revision 1.7 87/07/14 00:39:47 wesommer
* Changed interface to log_args.
*
com_err(whoami, 0, buf);
}
-void sms_com_err(whoami, code, message)
+void sms_com_err(whoami, code, fmt, pvar)
char *whoami;
int code;
- char *message;
+ char *fmt;
+ caddr_t pvar;
{
extern char *error_message();
extern client *cur_client;
struct iovec strings[7];
- char buf[32];
- if (cur_client)
- (void) sprintf(buf, "[#%d]", cur_client->id);
- else buf[0]='\0';
-
- strings[1].iov_base = buf;
- strings[1].iov_len = strlen(buf);
-
- strings[0].iov_base = whoami;
+
if (whoami) {
- strings[0].iov_len = strlen(whoami);
- strings[2].iov_base = ": ";
- strings[2].iov_len = 2;
- } else {
- strings[0].iov_len = 0;
- strings[2].iov_base = " ";
- strings[2].iov_len = 1;
+ fputs(whoami, stderr);
+ if (cur_client) fprintf(stderr, "[#%d]", cur_client->id);
+ fputs(": ", stderr);
}
if (code) {
- register char *errmsg = error_message(code);
- strings[3].iov_base = errmsg;
- strings[3].iov_len = strlen(errmsg);
- strings[4].iov_base = " ";
- strings[4].iov_len = 1;
- } else {
- strings[3].iov_len = 0;
- strings[4].iov_len = 0;
+ fputs(error_message(code), stderr);
+ }
+ if (fmt) {
+ _doprnt(fmt, pvar, stderr);
}
- strings[5].iov_base = message;
- strings[5].iov_len = strlen(message);
- strings[6].iov_base = "\n";
- strings[6].iov_len = 1;
- (void) writev(2, strings, 7);
+ putc('\n', stderr);
}
* Copyright (C) 1987 by the Massachusetts Institute of Technology
*
* $Log$
- * Revision 1.6 1987-08-04 01:30:54 wesommer
- * Mike's changes; checked in prior to working over messages.
+ * Revision 1.7 1987-08-04 01:49:20 wesommer
+ * Rearranged messages.
*
+ * Revision 1.6 87/08/04 01:30:54 wesommer
+ * Mike's changes; checked in prior to working over messages.
+ *
* Revision 1.5 87/06/21 16:37:58 wesommer
* Changed include files, reindented things.
*
## retrieve (def_uid = users.users_id) where users.login = "default"
}
- com_err(whoami, 0, "checking for default access");
/* check for default access */
## range of m is members
## repeat retrieve (exists = any(m.#member_id where m.list_id = @acl_id and
status = get_client(cl, &client_type, &client_id);
if (status != SMS_SUCCESS) return(status);
- com_err(whoami, 0, "checking for client in acl");
/* see if client is in the list (or any of its sub-lists) */
exists = find_member(acl_id, client_type, client_id, 0);
return ((exists) ? SMS_SUCCESS : SMS_PERM);
if (exists) return(1);
/* are there any sub-lists? */
- com_err(whoami, 0, "checking for sub-lists");
## repeat retrieve (exists = any(m.#member_id where m.#list_id = @list_id and
## m.#member_type = "LIST"))
if (!exists) return(0);
if (child) return;
- com_err(whoami, 0, "checking for client in sub-lists");
/* at top-level, check sub-lists for client (breadth-first search) */
while (sq_get_data(sq, &sublist)) {
exists = find_member(sublist, member_type, member_id, sq);
* Copyright (C) 1987 by the Massachusetts Institute of Technology
*
* $Log$
- * Revision 1.6 1987-08-04 01:10:02 wesommer
- * Changes by mike; checked in prior to my hacking.
+ * Revision 1.7 1987-08-04 01:49:41 wesommer
+ * Rearranged messages.
*
+Revision 1.6 87/08/04 01:10:02 wesommer
+Changes by mike; checked in prior to my hacking.
+
Revision 1.5 87/07/30 14:54:13 wesommer
Added debugging code in an attempt to catch a flakey problem.
table = q->rtable;
name = v->field;
- /* tell the logfile what we're doing */
- com_err(whoami, 0, "validating row");
- com_err(whoami, 0, qual);
-
+ if (log_flags & LOG_RES)
+ /* tell the logfile what we're doing */
+ com_err(whoami, 0, "validating row: %s", qual);
+
/* look for the record */
## range of rvar is table
## retrieve (rowcount = count(rvar.name where qual))
- com_err(whoami, 0, "row validated");
if (rowcount == 0) return(SMS_NO_MATCH);
if (rowcount > 1) return(SMS_NOT_UNIQUE);
return(SMS_EXISTS);
while (--n >= 0) {
switch (vo->type) {
case V_NAME:
- sprintf(buf, "validating %s in %s: %s",
+ if (log_flags&LOG_RES)
+ com_err(whoami, 0, "validating %s in %s: %s",
vo->namefield, vo->table, argv[vo->index]);
- com_err(whoami, 0, buf);
status = validate_name(argv, vo);
break;
case V_ID:
- sprintf(buf, "validating %s in %s: %s",
+ if (log_flags&LOG_RES)
+ com_err(whoami, 0, "validating %s in %s: %s",
vo->idfield, vo->table, argv[vo->index]);
- com_err(whoami, 0, buf);
status = validate_id(argv, vo);
break;
case V_TYPE:
- sprintf(buf, "validating %s type: %s",
+ if (log_flags&LOG_RES)
+ com_err(whoami, 0, "validating %s type: %s",
vo->table, argv[vo->index]);
- com_err(whoami, 0, buf);
status = validate_type(argv, vo);
break;
case V_TYPEDATA:
- sprintf(buf, "validating type-specific data: %s",
+ if (log_flags&LOG_RES)
+ com_err(whoami, 0, "validating type-specific data: %s",
argv[vo->index]);
- com_err(whoami, 0, buf);
status = validate_typedata(q, argv, vo);
break;