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());
43 syslog (LOG_DEBUG, "Reading file %s ", filename);
46 message=fopen(filename, "r");
48 syslog (LOG_INFO, "Unable to open file %s", filename);
49 sprintf(filename, "%s/message", SERVERTEXT);
50 message=fopen(filename, "r");
53 if (message!=NULL) /* if either message.pid or message exists */
55 /* added while loop to get characters and put in servermesg */
56 while ((( c=fgetc(message)) != EOF) && (i < (MAXMESGSIZE - 1))) {
57 if ( c == '\n') c = ' ';
64 /* Below code can be uncommented if you want to experiment with getting afpd
65 to delete the text file when it's done. Currently, it doesn't work. If you
66 can get it to work, delete this comment and enable the code! */
69 syslog (LOG_INFO, "Error deleting %s: %m", filename);
72 syslog (LOG_INFO, "Deleted %s", filename);
76 syslog (LOG_INFO, "Set server message to \"%s\"", servermesg);
83 int afp_getsrvrmesg(obj, ibuf, ibuflen, rbuf, rbuflen)
86 int ibuflen, *rbuflen;
89 u_int16_t type, bitmap;
91 memcpy(&type, ibuf + 2, sizeof(type));
92 memcpy(&bitmap, ibuf + 4, sizeof(bitmap));
94 switch (ntohs(type)) {
95 case AFPMESG_LOGIN: /* login */
96 message = obj->options.loginmesg;
98 case AFPMESG_SERVER: /* server */
103 return AFPERR_BITMAP;
106 if(strlen(message)==0)
110 * message type: 2 bytes
112 * message length: 1 byte
113 * message: up to 199 bytes
115 memcpy(rbuf, &type, sizeof(type));
116 rbuf += sizeof(type);
117 memcpy(rbuf, &bitmap, sizeof(bitmap));
118 rbuf += sizeof(bitmap);
119 *rbuflen = strlen(message);
120 if (*rbuflen > MAXMESGSIZE)
121 *rbuflen = MAXMESGSIZE;
123 memcpy(rbuf, message, *rbuflen);