Changeset View
Changeset View
Standalone View
Standalone View
buffer.c
Show First 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | |||||
void | void | ||||
buffer_consume_end(Buffer *buffer, u_int bytes) | buffer_consume_end(Buffer *buffer, u_int bytes) | ||||
{ | { | ||||
if (buffer_consume_end_ret(buffer, bytes) == -1) | if (buffer_consume_end_ret(buffer, bytes) == -1) | ||||
fatal("%s: buffer error", __func__); | fatal("%s: buffer error", __func__); | ||||
} | } | ||||
void | |||||
buffer_put_passwd(Buffer *buffer, struct passwd *pwent) | |||||
{ | |||||
/* We never send pointer values of struct passwd. | |||||
It is safe from wild pointer even if a new pointer member is added. */ | |||||
buffer_put_int64(buffer, sizeof(*pwent)); | |||||
buffer_put_cstring(buffer, pwent->pw_name); | |||||
buffer_put_cstring(buffer, "*"); | |||||
buffer_put_int(buffer, pwent->pw_uid); | |||||
buffer_put_int(buffer, pwent->pw_gid); | |||||
buffer_put_int64(buffer, pwent->pw_change); | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_GECOS | |||||
buffer_put_cstring(buffer, pwent->pw_gecos); | |||||
#endif | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_CLASS | |||||
buffer_put_cstring(buffer, pwent->pw_class); | |||||
#endif | |||||
buffer_put_cstring(buffer, pwent->pw_dir); | |||||
buffer_put_cstring(buffer, pwent->pw_shell); | |||||
buffer_put_int64(buffer, pwent->pw_expire); | |||||
buffer_put_int(buffer, pwent->pw_fields); | |||||
} | |||||
struct passwd * | |||||
buffer_get_passwd(Buffer *buffer) | |||||
{ | |||||
struct passwd *pw; | |||||
size_t len; | |||||
/* check if size of struct passwd is as same as sender's size */ | |||||
len = buffer_get_int64(buffer); | |||||
if (len != sizeof(*pw)) | |||||
return NULL; | |||||
pw = (struct passwd*)calloc(1, sizeof(*pw)); | |||||
cem: The cast of calloc's return is not needed in C (unlike perhaps C++). General C style is to not… | |||||
naito.yuichiro_gmail.comUnsubmitted Not Done Inline ActionsThanks for the comment. I was little confused about this. naito.yuichiro_gmail.com: Thanks for the comment. I was little confused about this.
I'll fix this. | |||||
if (pw == NULL) | |||||
return NULL; | |||||
pw->pw_name = buffer_get_string(buffer, NULL); | |||||
pw->pw_passwd = buffer_get_string(buffer, NULL); | |||||
pw->pw_uid = buffer_get_int(buffer); | |||||
pw->pw_gid = buffer_get_int(buffer); | |||||
pw->pw_change = buffer_get_int64(buffer); | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_GECOS | |||||
pw->pw_gecos = buffer_get_string(buffer, NULL); | |||||
#endif | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_CLASS | |||||
pw->pw_class = buffer_get_string(buffer, NULL); | |||||
#endif | |||||
pw->pw_dir = buffer_get_string(buffer, NULL); | |||||
pw->pw_shell = buffer_get_string(buffer, NULL); | |||||
pw->pw_expire = buffer_get_int64(buffer); | |||||
pw->pw_fields = buffer_get_int(buffer); | |||||
return pw; | |||||
} | |||||
void | |||||
buffer_free_passwd(struct passwd *pwent) | |||||
{ | |||||
free(pwent->pw_shell); | |||||
free(pwent->pw_dir); | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_CLASS | |||||
free(pwent->pw_class); | |||||
#endif | |||||
#ifdef HAVE_STRUCT_PASSWD_PW_GECOS | |||||
free(pwent->pw_gecos); | |||||
#endif | |||||
free(pwent->pw_passwd); | |||||
free(pwent->pw_name); | |||||
free(pwent); | |||||
} |
The cast of calloc's return is not needed in C (unlike perhaps C++). General C style is to not have explicit cast.