X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Flibnfs-zdr.c;h=24bf6c2bc38cf9d73d1cf24095e731794f32d534;hb=d7c6e9aaa9df593e951e2f19106dcc71102e74f1;hp=8d43144a96bb6e88aebb1f08ae314e117ea9ac89;hpb=45670bd0d680f9c9323857d785f37a214e741ddb;p=deb_libnfs.git diff --git a/lib/libnfs-zdr.c b/lib/libnfs-zdr.c index 8d43144..24bf6c2 100644 --- a/lib/libnfs-zdr.c +++ b/lib/libnfs-zdr.c @@ -20,9 +20,16 @@ * i.e. zdrmem_create() buffers. * It aims to be compatible with normal rpcgen generated functions. */ +#ifdef WIN32 +#include "win32_compat.h" +#else +#include +#include +#endif/*WIN32*/ #include #include +#include #include "libnfs-zdr.h" struct opaque_auth _null_auth; @@ -160,9 +167,15 @@ bool_t libnfs_zdr_bytes(ZDR *zdrs, char **bufp, uint32_t *size, uint32_t maxsize } -bool_t libnfs_zdr_enum(ZDR *zdrs, int32_t *e) +bool_t libnfs_zdr_enum(ZDR *zdrs, enum_t *e) { - return libnfs_zdr_u_int(zdrs, (uint32_t *)e); + bool_t ret; + int32_t i = *e; + + ret = libnfs_zdr_u_int(zdrs, (uint32_t *)&i); + *e = i; + + return ret; } bool_t libnfs_zdr_bool(ZDR *zdrs, bool_t *b) @@ -269,7 +282,7 @@ bool_t libnfs_zdr_array(ZDR *zdrs, char **arrp, uint32_t *size, uint32_t maxsize } for (i = 0; i < *size; i++) { - if (proc(zdrs, *arrp + i * elsize)) { + if (!proc(zdrs, *arrp + i * elsize)) { return FALSE; } } @@ -295,27 +308,27 @@ static bool_t libnfs_opaque_auth(ZDR *zdrs, struct opaque_auth *auth) static bool_t libnfs_rpc_call_body(ZDR *zdrs, struct call_body *cmb) { - if (!libnfs_zdr_u_int(zdrs, &cmb->cb_rpcvers)) { + if (!libnfs_zdr_u_int(zdrs, &cmb->rpcvers)) { return FALSE; } - if (!libnfs_zdr_u_int(zdrs, &cmb->cb_prog)) { + if (!libnfs_zdr_u_int(zdrs, &cmb->prog)) { return FALSE; } - if (!libnfs_zdr_u_int(zdrs, &cmb->cb_vers)) { + if (!libnfs_zdr_u_int(zdrs, &cmb->vers)) { return FALSE; } - if (!libnfs_zdr_u_int(zdrs, &cmb->cb_proc)) { + if (!libnfs_zdr_u_int(zdrs, &cmb->proc)) { return FALSE; } - if (!libnfs_opaque_auth(zdrs, &cmb->cb_cred)) { + if (!libnfs_opaque_auth(zdrs, &cmb->cred)) { return FALSE; } - if (!libnfs_opaque_auth(zdrs, &cmb->cb_verf)) { + if (!libnfs_opaque_auth(zdrs, &cmb->verf)) { return FALSE; } @@ -324,25 +337,25 @@ static bool_t libnfs_rpc_call_body(ZDR *zdrs, struct call_body *cmb) static bool_t libnfs_accepted_reply(ZDR *zdrs, struct accepted_reply *ar) { - if (!libnfs_opaque_auth(zdrs, &ar->ar_verf)) { + if (!libnfs_opaque_auth(zdrs, &ar->verf)) { return FALSE; } - if (!libnfs_zdr_u_int(zdrs, &ar->ar_stat)) { + if (!libnfs_zdr_u_int(zdrs, &ar->stat)) { return FALSE; } - switch (ar->ar_stat) { + switch (ar->stat) { case SUCCESS: - if (!ar->ar_results.proc(zdrs, ar->ar_results.where)) { + if (!ar->reply_data.results.proc(zdrs, ar->reply_data.results.where)) { return FALSE; } return TRUE; case PROG_MISMATCH: - if (!libnfs_zdr_u_int(zdrs, &ar->ar_vers.low)) { + if (!libnfs_zdr_u_int(zdrs, &ar->reply_data.mismatch_info.low)) { return FALSE; } - if (!libnfs_zdr_u_int(zdrs, &ar->ar_vers.high)) { + if (!libnfs_zdr_u_int(zdrs, &ar->reply_data.mismatch_info.high)) { return FALSE; } return TRUE; @@ -353,26 +366,47 @@ static bool_t libnfs_accepted_reply(ZDR *zdrs, struct accepted_reply *ar) return FALSE; } -static bool_t libnfs_rejected_reply(ZDR *zdrs, struct rejected_reply *RP_dr) +static bool_t libnfs_rejected_reply(ZDR *zdrs, struct rejected_reply *rr) { -printf("rejected reply\n"); -exit(10); + if (!libnfs_zdr_u_int(zdrs, &rr->stat)) { + return FALSE; + } + + switch (rr->stat) { + case RPC_MISMATCH: + if (!libnfs_zdr_u_int(zdrs, &rr->reject_data.mismatch_info.low)) { + return FALSE; + } + if (!libnfs_zdr_u_int(zdrs, &rr->reject_data.mismatch_info.high)) { + return FALSE; + } + return TRUE; + case AUTH_ERROR: + if (!libnfs_zdr_u_int(zdrs, &rr->reject_data.stat)) { + return FALSE; + } + return TRUE; + default: + return TRUE; + } + + return FALSE; } static bool_t libnfs_rpc_reply_body(ZDR *zdrs, struct reply_body *rmb) { - if (!libnfs_zdr_u_int(zdrs, &rmb->rp_stat)) { + if (!libnfs_zdr_u_int(zdrs, &rmb->stat)) { return FALSE; } - switch (rmb->rp_stat) { + switch (rmb->stat) { case MSG_ACCEPTED: - if (!libnfs_accepted_reply(zdrs, &rmb->rp_acpt)) { + if (!libnfs_accepted_reply(zdrs, &rmb->reply.areply)) { return FALSE; } return TRUE; case MSG_DENIED: - if (!libnfs_rejected_reply(zdrs, &rmb->rp_rjct)) { + if (!libnfs_rejected_reply(zdrs, &rmb->reply.rreply)) { return FALSE; } return TRUE; @@ -383,20 +417,20 @@ static bool_t libnfs_rpc_reply_body(ZDR *zdrs, struct reply_body *rmb) static bool_t libnfs_rpc_msg(ZDR *zdrs, struct rpc_msg *msg) { - if (!libnfs_zdr_u_int(zdrs, &msg->rm_xid)) { + if (!libnfs_zdr_u_int(zdrs, &msg->xid)) { return FALSE; } - if (!libnfs_zdr_u_int(zdrs, &msg->rm_direction)) { + if (!libnfs_zdr_u_int(zdrs, &msg->direction)) { return FALSE; } - switch (msg->rm_direction) { + switch (msg->direction) { case CALL: - return libnfs_rpc_call_body(zdrs, &msg->ru.RM_cmb); + return libnfs_rpc_call_body(zdrs, &msg->body.cbody); break; case REPLY: - return libnfs_rpc_reply_body(zdrs, &msg->ru.RM_rmb); + return libnfs_rpc_reply_body(zdrs, &msg->body.rbody); break; default: return FALSE; @@ -413,11 +447,11 @@ bool_t libnfs_zdr_replymsg(ZDR *zdrs, struct rpc_msg *msg) return libnfs_rpc_msg(zdrs, msg); } -AUTH *authnone_create(void) +struct AUTH *authnone_create(void) { - AUTH *auth; + struct AUTH *auth; - auth = malloc(sizeof(AUTH)); + auth = malloc(sizeof(struct AUTH)); auth->ah_cred.oa_flavor = AUTH_NONE; auth->ah_cred.oa_length = 0; @@ -432,15 +466,15 @@ AUTH *authnone_create(void) return auth; } -AUTH *libnfs_authunix_create(char *host, uint32_t uid, uint32_t gid, uint32_t len, uint32_t *groups) +struct AUTH *libnfs_authunix_create(char *host, uint32_t uid, uint32_t gid, uint32_t len, uint32_t *groups) { - AUTH *auth; + struct AUTH *auth; int size; uint32_t *buf; int idx; size = 4 + 4 + ((strlen(host) + 3) & ~3) + 4 + 4 + 4 + len * 4; - auth = malloc(sizeof(AUTH)); + auth = malloc(sizeof(struct AUTH)); auth->ah_cred.oa_flavor = AUTH_UNIX; auth->ah_cred.oa_length = size; auth->ah_cred.oa_base = malloc(size); @@ -468,12 +502,12 @@ AUTH *libnfs_authunix_create(char *host, uint32_t uid, uint32_t gid, uint32_t le return auth; } -AUTH *libnfs_authunix_create_default(void) +struct AUTH *libnfs_authunix_create_default(void) { return libnfs_authunix_create("libnfs", getuid(), -1, 0, NULL); } -void libnfs_auth_destroy(AUTH *auth) +void libnfs_auth_destroy(struct AUTH *auth) { if (auth->ah_cred.oa_base) { free(auth->ah_cred.oa_base);