2 * Copyright (c) 1997 Adrian Sun (asun@zoology.washington.edu)
3 * All Rights Reserved. See COPYRIGHT.
12 #include <atalk/afp.h>
18 #define MAXMESGSIZE 199
20 /* this is only used by afpd children, so it's okay. */
21 static char servermesg[MAXMESGSIZE] = "";
23 void setmessage(const char *message)
25 strncpy(servermesg, message, MAXMESGSIZE);
28 void readmessage(void)
30 /* Read server message from file defined as SERVERTEXT */
38 // Construct file name SERVERTEXT/message.[pid]
39 filename=malloc(sizeof(SERVERTEXT)+15);
40 sprintf(filename, "%s/message.%d", SERVERTEXT, getpid());
42 syslog (LOG_DEBUG, "Reading file %s ", filename);
44 message=fopen(filename, "r");
46 syslog (LOG_INFO, "Unable to open file %s", filename);
47 sprintf(filename, "%s/message", SERVERTEXT);
48 message=fopen(filename, "r");
49 /* sprintf (servermesg, "Server error: unable to open %s.", filename);
54 /* added while loop to get characters and put in servermesg */
55 while ((( c=fgetc(message)) != EOF) && (i < (MAXMESGSIZE - 1))) {
56 if ( c == '\n') c = ' ';
65 syslog (LOG_INFO, "Error deleting %s", filename);
67 syslog (LOG_DEBUG, "Deleted %s", filename);
70 syslog (LOG_DEBUG, "Set server message to \"%s\"", servermesg);
76 int afp_getsrvrmesg(obj, ibuf, ibuflen, rbuf, rbuflen)
79 int ibuflen, *rbuflen;
82 u_int16_t type, bitmap;
84 memcpy(&type, ibuf + 2, sizeof(type));
85 memcpy(&bitmap, ibuf + 4, sizeof(bitmap));
87 switch (ntohs(type)) {
88 case AFPMESG_LOGIN: /* login */
89 message = obj->options.loginmesg;
91 case AFPMESG_SERVER: /* server */
99 if(strlen(message)==0)
103 * message type: 2 bytes
105 * message length: 1 byte
106 * message: up to 199 bytes
108 memcpy(rbuf, &type, sizeof(type));
109 rbuf += sizeof(type);
110 memcpy(rbuf, &bitmap, sizeof(bitmap));
111 rbuf += sizeof(bitmap);
112 *rbuflen = strlen(message);
113 if (*rbuflen > MAXMESGSIZE)
114 *rbuflen = MAXMESGSIZE;
116 memcpy(rbuf, message, *rbuflen);