int ncp_change_obj_passwd(NWCONN_HANDLE connid, const struct ncp_bindery_object *object, const u_char *key, const u_char *oldpasswd, const u_char *newpasswd) { long id = htonl(object->object_id); u_char cryptkey[8]; u_char newpwd[16]; /* new passwd as stored by server */ u_char oldpwd[16]; /* old passwd as stored by server */ u_char len; DECLARE_RQ; memcpy(cryptkey, key, 8); nw_keyhash((u_char *)&id, oldpasswd, strlen(oldpasswd), oldpwd); nw_keyhash((u_char *)&id, newpasswd, strlen(newpasswd), newpwd); nw_encrypt(cryptkey, oldpwd, cryptkey); nw_passencrypt(oldpwd, newpwd, newpwd); nw_passencrypt(oldpwd + 8, newpwd + 8, newpwd + 8); if ((len = strlen(newpasswd)) > 63) { len = 63; } len = ((len ^ oldpwd[0] ^ oldpwd[1]) & 0x7f) | 0x40; ncp_init_request_s(conn, 75); ncp_add_mem(conn, cryptkey, 8); ncp_add_word_hl(conn, object->object_type); ncp_add_pstring(conn, object->object_name); ncp_add_byte(conn, len); ncp_add_mem(conn, newpwd, 16); return ncp_request(connid, 23, conn); }
static NWCCODE ncp_log_physical_record32(NWCONN_HANDLE conn, const char fh[6], u_int32_t startOffset, u_int32_t length, unsigned int flags, unsigned int timeout) { NWCCODE err; ncp_init_request(conn); ncp_add_byte(conn, flags); ncp_add_mem(conn, fh, 6); ncp_add_dword_hl(conn, startOffset); ncp_add_dword_hl(conn, length); ncp_add_word_hl(conn, timeout); err = ncp_request(conn, 109); ncp_unlock_conn(conn); return err; }
int ncp_keyed_verify_password(NWCONN_HANDLE cH, char *key, char *passwd, struct ncp_bindery_object *objinfo) { u_long id = htonl(objinfo->object_id); u_char cryptkey[8]; u_char buf[128]; DECLARE_RQ; nw_keyhash((u_char *)&id, passwd, strlen(passwd), buf); nw_encrypt(key, buf, cryptkey); ncp_init_request_s(conn, 74); ncp_add_mem(conn, cryptkey, sizeof(cryptkey)); ncp_add_word_hl(conn, objinfo->object_type); ncp_add_pstring(conn, objinfo->object_name); return ncp_request(cH, 23, conn); }
int ncp_read_property_value(NWCONN_HANDLE connid, int object_type, const char *object_name, int segment, const char *prop_name, struct nw_property *target) { int error; struct ncp_buf conn; ncp_init_request_s(&conn, 61); ncp_add_word_hl(&conn, object_type); ncp_add_pstring(&conn, object_name); ncp_add_byte(&conn, segment); ncp_add_pstring(&conn, prop_name); if ((error = ncp_request(connid,23,&conn)) != 0) { return error; } memcpy(&(target->value), ncp_reply_data(&conn, 0), 128); target->more_flag = ncp_reply_byte(&conn, 128); target->property_flag = ncp_reply_byte(&conn, 129); return 0; }
int ncp_scan_bindery_object(NWCONN_HANDLE connid, u_int32_t last_id, u_int16_t object_type, const char *search_string, struct ncp_bindery_object *target) { int error; DECLARE_RQ; ncp_init_request_s(conn, 55); ncp_add_dword_hl(conn, last_id); ncp_add_word_hl(conn, object_type); ncp_add_pstring(conn, search_string); error = ncp_request(connid, 23, conn); if (error) return error; target->object_id = ncp_reply_dword_hl(conn, 0); target->object_type = ncp_reply_word_hl(conn, 4); memcpy(target->object_name, ncp_reply_data(conn, 6),NCP_BINDERY_NAME_LEN); target->object_flags = ncp_reply_byte(conn, 54); target->object_security = ncp_reply_byte(conn, 55); target->object_has_prop = ncp_reply_byte(conn, 56); return 0; }
int ncp_get_bindery_object_id(NWCONN_HANDLE connid, u_int16_t object_type, const char *object_name, struct ncp_bindery_object *target) { int error; DECLARE_RQ; ncp_init_request_s(conn, 53); ncp_add_word_hl(conn, object_type); ncp_add_pstring(conn, object_name); if ((error = ncp_request(connid, 23, conn)) != 0) { return error; } if (conn->rpsize < 54) { return EACCES; } target->object_id = ncp_reply_dword_hl(conn, 0); target->object_type = ncp_reply_word_hl(conn, 4); memcpy(target->object_name, ncp_reply_data(conn, 6), 48); return 0; }