Index: appl/lib/fs_lib.c =================================================================== RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/appl/lib/fs_lib.c,v retrieving revision 1.31.2.3 diff -u -r1.31.2.3 fs_lib.c --- appl/lib/fs_lib.c 2001/10/02 16:13:02 1.31.2.3 +++ appl/lib/fs_lib.c 2001/10/30 13:46:51 @@ -600,22 +600,22 @@ fs_get_sysname (char *sys, size_t sys_sz) { struct ViceIoctl a_params; - int32_t set = 0; + int32_t set = 0; /* 0 to get value */ char *buf; - buf = malloc (sys_sz + 4); + buf = malloc (sys_sz + sizeof(set)); if (buf == NULL) return ENOMEM; a_params.in = (caddr_t)&set; a_params.in_size = sizeof(set); a_params.out = buf; - a_params.out_size = sys_sz + 4; + a_params.out_size = sys_sz + sizeof(set); if(k_pioctl (NULL, VIOC_AFS_SYSNAME, &a_params, 1) < 0) return errno; else { - strlcpy (sys, buf + 4, sys_sz); + strlcpy (sys, buf + sizeof(set), sys_sz); return 0; } } @@ -628,16 +628,16 @@ fs_set_sysname (const char *sys) { struct ViceIoctl a_params; - int32_t set = 1; + int32_t set = 1; /* 1 to set value */ a_params.in_size = sizeof(set) + strlen(sys) + 1; a_params.in = malloc(a_params.in_size); if (a_params.in == NULL) return ENOMEM; - a_params.out = NULL; - a_params.out_size = 0; memcpy (a_params.in, &set, sizeof(set)); strcpy (a_params.in + sizeof(set), sys); + a_params.out = NULL; + a_params.out_size = 0; if(k_pioctl (NULL, VIOC_AFS_SYSNAME, &a_params, 1) < 0) return errno; Index: arlad/messages.c =================================================================== RCS file: /afs/stacken.kth.se/src/SourceRepository/arla/arlad/messages.c,v retrieving revision 1.231.2.12 diff -u -r1.231.2.12 messages.c --- arlad/messages.c 2001/10/19 04:25:52 1.231.2.12 +++ arlad/messages.c 2001/10/30 13:18:06 @@ -3076,25 +3076,32 @@ return xfs_send_message_wakeup (fd, h->header.sequence_num, EPERM); + if (parm != 1) + return xfs_send_message_wakeup (fd, + h->header.sequence_num, + EINVAL); t += sizeof(int32_t); arla_warnx (ADEBMSG, "VIOC_AFS_SYSNAME: setting sysname: %s", t); memcpy(arlasysname, t, h->insize); arlasysname[h->insize] = '\0'; return xfs_send_message_wakeup(fd, h->header.sequence_num, 0); } else { - char *buf; - size_t sysname_len = strlen (arlasysname); + int buflen = 0; + char *buf = NULL; + int32_t one = 1; int ret; - - buf = malloc (sysname_len + 4 + 1); + size_t sysname_len = strlen (arlasysname); + + buflen = sysname_len + sizeof(int32_t) + 1; + buf = malloc (buflen); if (buf == NULL) return xfs_send_message_wakeup (fd, h->header.sequence_num, ENOMEM); - *((u_int32_t *)buf) = sysname_len; - memcpy (buf + 4, arlasysname, sysname_len); - buf[sysname_len + 4] = '\0'; + memcpy (buf, &one, sizeof(int32_t)); + memcpy (buf + sizeof(int32_t), arlasysname, sysname_len); + buf[buflen - 1] = '\0'; ret = xfs_send_message_wakeup_data (fd, h->header.sequence_num, 0, - buf, sysname_len + 5); + buf, buflen); free (buf); return ret; }