summaryrefslogtreecommitdiff
path: root/source4/libcli
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-10-27 03:15:42 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:04:49 -0500
commit9d055846f225bea4953822f40fab1d2f1a2e2d07 (patch)
tree9a513f3eeb7223a96e1df1d65060b095002e534e /source4/libcli
parent5ae448116165a6bb9d792686db825b8b47f27201 (diff)
downloadsamba-9d055846f225bea4953822f40fab1d2f1a2e2d07.tar.gz
samba-9d055846f225bea4953822f40fab1d2f1a2e2d07.tar.bz2
samba-9d055846f225bea4953822f40fab1d2f1a2e2d07.zip
r3278: - rewrote the client side rpc connection code to use lib/socket/
rather than doing everything itself. This greatly simplifies the code, although I really don't like the socket_recv() interface (it always allocates memory for you, which means an extra memcpy in this code) - fixed several bugs in the socket_ipv4.c code, in particular client side code used a non-blocking connect but didn't handle EINPROGRESS, so it had no chance of working. Also fixed the error codes, using map_nt_error_from_unix() - cleaned up and expanded map_nt_error_from_unix() - changed interpret_addr2() to not take a mem_ctx. It makes absolutely no sense to allocate a fixed size 4 byte structure like this. Dozens of places in the code were also using interpret_addr2() incorrectly (precisely because the allocation made no sense) (This used to be commit 7f2c771b0e0e98c5c9e5cf662592d64d34ff1205)
Diffstat (limited to 'source4/libcli')
-rw-r--r--source4/libcli/namequery.c6
-rw-r--r--source4/libcli/util/errormap.c73
2 files changed, 41 insertions, 38 deletions
diff --git a/source4/libcli/namequery.c b/source4/libcli/namequery.c
index de0f406209..0f21e33b85 100644
--- a/source4/libcli/namequery.c
+++ b/source4/libcli/namequery.c
@@ -522,7 +522,7 @@ BOOL getlmhostsent( TALLOC_CTX *mem_ctx,
continue;
}
- *ipaddr = *interpret_addr2(mem_ctx, ip);
+ *ipaddr = interpret_addr2(ip);
/* Extra feature. If the name ends in '#XX', where XX is a hex number,
then only add that name type. */
@@ -643,7 +643,7 @@ BOOL resolve_wins(TALLOC_CTX *mem_ctx, const char *name, int name_type,
}
/* the address we will be sending from */
- src_ip = *interpret_addr2(mem_ctx, lp_socket_address());
+ src_ip = interpret_addr2(lp_socket_address());
/* in the worst case we will try every wins server with every
tag! */
@@ -900,7 +900,7 @@ BOOL resolve_name(TALLOC_CTX *mem_ctx, const char *name, struct in_addr *return_
int count = 0;
if (is_ipaddress(name)) {
- *return_ip = *interpret_addr2(mem_ctx, name);
+ *return_ip = interpret_addr2(name);
return True;
}
diff --git a/source4/libcli/util/errormap.c b/source4/libcli/util/errormap.c
index 91ebddc181..46e4831f89 100644
--- a/source4/libcli/util/errormap.c
+++ b/source4/libcli/util/errormap.c
@@ -1490,66 +1490,69 @@ WERROR ntstatus_to_werror(NTSTATUS error)
struct unix_error_map {
int unix_error;
- int dos_class;
- int dos_code;
NTSTATUS nt_error;
};
-const struct unix_error_map unix_dos_nt_errmap[] = {
- { EPERM, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED },
- { EACCES, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED },
- { ENOENT, ERRDOS, ERRbadfile, NT_STATUS_OBJECT_NAME_NOT_FOUND },
- { ENOTDIR, ERRDOS, ERRbadpath, NT_STATUS_NOT_A_DIRECTORY },
- { EIO, ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR },
- { EBADF, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE },
- { EINVAL, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE },
- { EEXIST, ERRDOS, ERRfilexists, NT_STATUS_OBJECT_NAME_COLLISION},
- { ENFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES },
- { EMFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES },
- { ENOSPC, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
- { EISDIR, ERRDOS, ERRbadpath, NT_STATUS_FILE_IS_A_DIRECTORY },
+const struct unix_error_map unix_nt_errmap[] = {
+ { EAGAIN, STATUS_MORE_ENTRIES },
+ { EINTR, STATUS_MORE_ENTRIES },
+ { EINPROGRESS, STATUS_MORE_ENTRIES },
+ { EPERM, NT_STATUS_ACCESS_DENIED },
+ { EACCES, NT_STATUS_ACCESS_DENIED },
+ { ENOENT, NT_STATUS_OBJECT_NAME_NOT_FOUND },
+ { ENOTDIR, NT_STATUS_NOT_A_DIRECTORY },
+ { EIO, NT_STATUS_IO_DEVICE_ERROR },
+ { EBADF, NT_STATUS_INVALID_HANDLE },
+ { EINVAL, NT_STATUS_INVALID_PARAMETER },
+ { EEXIST, NT_STATUS_OBJECT_NAME_COLLISION},
+ { ENFILE, NT_STATUS_TOO_MANY_OPENED_FILES },
+ { EMFILE, NT_STATUS_TOO_MANY_OPENED_FILES },
+ { ENOSPC, NT_STATUS_DISK_FULL },
+ { EISDIR, NT_STATUS_FILE_IS_A_DIRECTORY },
+ { ENOTSOCK, NT_STATUS_INVALID_HANDLE },
+ { EFAULT, NT_STATUS_INVALID_PARAMETER },
+ { EMSGSIZE, NT_STATUS_INVALID_BUFFER_SIZE },
+ { ENOBUFS, NT_STATUS_NO_MEMORY },
+ { ENOMEM, NT_STATUS_NO_MEMORY },
+ { EPIPE, NT_STATUS_CONNECTION_DISCONNECTED },
+ { ECONNREFUSED, NT_STATUS_CONNECTION_REFUSED },
+ { EBUSY, NT_STATUS_SHARING_VIOLATION },
#ifdef EDQUOT
- { EDQUOT, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
+ { EDQUOT, NT_STATUS_QUOTA_EXCEEDED },
#endif
#ifdef ENOTEMPTY
- { ENOTEMPTY, ERRDOS, ERRnoaccess, NT_STATUS_DIRECTORY_NOT_EMPTY },
+ { ENOTEMPTY, NT_STATUS_DIRECTORY_NOT_EMPTY },
#endif
#ifdef EXDEV
- { EXDEV, ERRDOS, ERRdiffdevice, NT_STATUS_NOT_SAME_DEVICE },
+ { EXDEV, NT_STATUS_NOT_SAME_DEVICE },
#endif
#ifdef EROFS
- { EROFS, ERRHRD, ERRnowrite, NT_STATUS_ACCESS_DENIED },
+ { EROFS, NT_STATUS_MEDIA_WRITE_PROTECTED },
#endif
#ifdef ENAMETOOLONG
- { ENAMETOOLONG, ERRDOS, 206, NT_STATUS_OBJECT_NAME_INVALID },
+ { ENAMETOOLONG, NT_STATUS_NAME_TOO_LONG },
#endif
#ifdef EFBIG
- { EFBIG, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL },
+ { EFBIG, NT_STATUS_DISK_FULL },
#endif
-#ifdef EFBIG
- { EBUSY, ERRDOS, ERRbadshare, NT_STATUS_SHARING_VIOLATION },
-#endif
- { 0, 0, 0, NT_STATUS_OK }
+ { 0, NT_STATUS_UNSUCCESSFUL }
};
+
/*********************************************************************
Map an NT error code from a Unix error code.
*********************************************************************/
NTSTATUS map_nt_error_from_unix(int unix_error)
{
- int i = 0;
-
- if (unix_error == 0) {
- return NT_STATUS_UNSUCCESSFUL;
- }
+ int i;
/* Look through list */
- while(unix_dos_nt_errmap[i].unix_error != 0) {
- if (unix_dos_nt_errmap[i].unix_error == unix_error)
- return unix_dos_nt_errmap[i].nt_error;
- i++;
+ for (i=0;i<ARRAY_SIZE(unix_nt_errmap);i++) {
+ if (unix_nt_errmap[i].unix_error == unix_error) {
+ return unix_nt_errmap[i].nt_error;
+ }
}
/* Default return */
- return NT_STATUS_ACCESS_DENIED;
+ return NT_STATUS_UNSUCCESSFUL;
}