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");
51 if (message!=NULL) /* if either message.pid or message exists */
53 /* added while loop to get characters and put in servermesg */
54 while ((( c=fgetc(message)) != EOF) && (i < (MAXMESGSIZE - 1))) {
55 if ( c == '\n') c = ' ';
62 /* Below code can be uncommented if you want to experiment with getting afpd
63 to delete the text file when it's done. Currently, it doesn't work. If you
64 can get it to work, delete this comment and enable the code! */
65 /* i=unlink (filename);
67 syslog (LOG_INFO, "Error deleting %s: %m", filename);
69 syslog (LOG_DEBUG, "Deleted %s", filename);
72 syslog (LOG_DEBUG, "Set server message to \"%s\"", servermesg); */
78 int afp_getsrvrmesg(obj, ibuf, ibuflen, rbuf, rbuflen)
81 int ibuflen, *rbuflen;
84 u_int16_t type, bitmap;
86 memcpy(&type, ibuf + 2, sizeof(type));
87 memcpy(&bitmap, ibuf + 4, sizeof(bitmap));
89 switch (ntohs(type)) {
90 case AFPMESG_LOGIN: /* login */
91 message = obj->options.loginmesg;
93 case AFPMESG_SERVER: /* server */
101 if(strlen(message)==0)
105 * message type: 2 bytes
107 * message length: 1 byte
108 * message: up to 199 bytes
110 memcpy(rbuf, &type, sizeof(type));
111 rbuf += sizeof(type);
112 memcpy(rbuf, &bitmap, sizeof(bitmap));
113 rbuf += sizeof(bitmap);
114 *rbuflen = strlen(message);
115 if (*rbuflen > MAXMESGSIZE)
116 *rbuflen = MAXMESGSIZE;
118 memcpy(rbuf, message, *rbuflen);