summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/cluster/cluster.c1
-rw-r--r--source4/cluster/ctdb/ctdb_cluster.c1
-rw-r--r--source4/cluster/local.c1
-rw-r--r--source4/headermap.txt4
-rw-r--r--source4/include/includes.h4
-rw-r--r--source4/lib/registry/hive.h2
-rw-r--r--source4/lib/registry/registry.h2
-rw-r--r--source4/libcli/config.mk3
-rw-r--r--source4/libcli/ldap/ldap.h1
-rw-r--r--source4/libcli/raw/clierror.c (renamed from source4/libcli/util/clierror.c)2
-rw-r--r--source4/libcli/raw/interfaces.h1
-rw-r--r--source4/libcli/util/doserr.h125
-rw-r--r--source4/libcli/util/error.h29
-rw-r--r--source4/libcli/util/nt_status.h122
-rw-r--r--source4/libcli/util/ntstatus.h (renamed from source4/libcli/util/nterr.h)93
-rw-r--r--source4/libcli/util/werror.h193
-rw-r--r--source4/libnet/libnet.h2
-rw-r--r--source4/libnet/userman.h2
-rw-r--r--source4/librpc/idl/dfs.idl2
-rw-r--r--source4/librpc/idl/dssetup.idl2
-rw-r--r--source4/librpc/idl/epmapper.idl2
-rw-r--r--source4/librpc/idl/notify.idl2
-rw-r--r--source4/librpc/idl/orpc.idl2
-rw-r--r--source4/librpc/ndr/libndr.h2
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/Header.pm1
-rw-r--r--source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm2
-rw-r--r--source4/smbd/service_stream.h2
-rw-r--r--source4/smbd/service_task.h2
28 files changed, 341 insertions, 266 deletions
diff --git a/source4/cluster/cluster.c b/source4/cluster/cluster.c
index 606ca9b8b1..673ce2be4e 100644
--- a/source4/cluster/cluster.c
+++ b/source4/cluster/cluster.c
@@ -22,6 +22,7 @@
#include "includes.h"
#include "cluster/cluster.h"
#include "cluster/cluster_private.h"
+#include "librpc/gen_ndr/misc.h"
static struct cluster_ops *ops;
diff --git a/source4/cluster/ctdb/ctdb_cluster.c b/source4/cluster/ctdb/ctdb_cluster.c
index ad35a5effe..8cb1c0c459 100644
--- a/source4/cluster/ctdb/ctdb_cluster.c
+++ b/source4/cluster/ctdb/ctdb_cluster.c
@@ -29,6 +29,7 @@
#include "db_wrap.h"
#include "lib/util/dlinklist.h"
#include "param/param.h"
+#include "librpc/gen_ndr/misc.h"
/* a linked list of messaging handlers, allowing incoming messages
to be directed to the right messaging context */
diff --git a/source4/cluster/local.c b/source4/cluster/local.c
index feefe902e1..be6d857d7b 100644
--- a/source4/cluster/local.c
+++ b/source4/cluster/local.c
@@ -26,6 +26,7 @@
#include "db_wrap.h"
#include "system/filesys.h"
#include "param/param.h"
+#include "librpc/gen_ndr/misc.h"
/*
server a server_id for the local node
diff --git a/source4/headermap.txt b/source4/headermap.txt
index 63c0ec31b2..ce42492cd6 100644
--- a/source4/headermap.txt
+++ b/source4/headermap.txt
@@ -33,9 +33,9 @@ librpc/ndr/libndr.h: ndr.h
lib/registry/registry.h: registry/registry.h
lib/registry/hive.h: registry/hive.h
lib/registry/patchfile.h: registry/patchfile.h
-libcli/util/nterr.h: core/nterr.h
+libcli/util/werror.h: core/werror.h
libcli/util/doserr.h: core/doserr.h
-libcli/util/nt_status.h: core/ntstatus.h
+libcli/util/ntstatus.h: core/ntstatus.h
libcli/cldap/cldap.h: cldap.h
lib/samba3/samba3.h: samba3.h
librpc/gen_ndr/dcerpc.h: gen_ndr/dcerpc.h
diff --git a/source4/include/includes.h b/source4/include/includes.h
index d78f297aa6..93527b564b 100644
--- a/source4/include/includes.h
+++ b/source4/include/includes.h
@@ -39,20 +39,16 @@
#include <stdlib.h>
#include <stdbool.h>
#include <talloc.h>
-#include "libcli/util/nt_status.h"
#ifndef _PRINTF_ATTRIBUTE
#define _PRINTF_ATTRIBUTE(a1, a2) PRINTF_ATTRIBUTE(a1, a2)
#endif
-#include "charset/charset.h"
#include "util/util.h"
-#include "librpc/gen_ndr/misc.h"
typedef bool BOOL;
#define False false
#define True true
-struct smbcli_tree;
#include "libcli/util/error.h"
/* String routines */
diff --git a/source4/lib/registry/hive.h b/source4/lib/registry/hive.h
index 8214208870..5a5356dfd2 100644
--- a/source4/lib/registry/hive.h
+++ b/source4/lib/registry/hive.h
@@ -23,7 +23,7 @@
#include <talloc.h>
#include "librpc/gen_ndr/security.h"
-#include "libcli/util/nt_status.h"
+#include "libcli/util/ntstatus.h"
/**
* This file contains the hive API. This API is generally used for
diff --git a/source4/lib/registry/registry.h b/source4/lib/registry/registry.h
index 90dd094eb9..6dec84ad89 100644
--- a/source4/lib/registry/registry.h
+++ b/source4/lib/registry/registry.h
@@ -26,7 +26,7 @@ struct registry_context;
#include <talloc.h>
#include "librpc/gen_ndr/security.h"
#include "lib/registry/hive.h"
-#include "libcli/util/nt_status.h"
+#include "libcli/util/ntstatus.h"
/* Handles for the predefined keys */
#define HKEY_CLASSES_ROOT 0x80000000
diff --git a/source4/libcli/config.mk b/source4/libcli/config.mk
index d49fc90ec4..89e6f3ce1c 100644
--- a/source4/libcli/config.mk
+++ b/source4/libcli/config.mk
@@ -3,11 +3,9 @@ include ldap/config.mk
include security/config.mk
[SUBSYSTEM::LIBSAMBA-ERRORS]
-PUBLIC_PROTO_HEADER = util/proto.h
PUBLIC_HEADERS = util/error.h util/nterr.h util/doserr.h util/nt_status.h
OBJ_FILES = util/doserr.o \
util/errormap.o \
- util/clierror.o \
util/nterr.o \
[SUBSYSTEM::ASN1_UTIL]
@@ -133,6 +131,7 @@ OBJ_FILES = raw/rawfile.o \
raw/clitransport.o \
raw/clisession.o \
raw/clitree.o \
+ raw/clierror.o \
raw/rawrequest.o \
raw/rawreadwrite.o \
raw/rawsearch.o \
diff --git a/source4/libcli/ldap/ldap.h b/source4/libcli/ldap/ldap.h
index 022c70e36a..e89322213a 100644
--- a/source4/libcli/ldap/ldap.h
+++ b/source4/libcli/ldap/ldap.h
@@ -22,6 +22,7 @@
#define _SMB_LDAP_H
#include "lib/ldb/include/ldb.h"
+#include "librpc/gen_ndr/misc.h"
enum ldap_request_tag {
LDAP_TAG_BindRequest = 0,
diff --git a/source4/libcli/util/clierror.c b/source4/libcli/raw/clierror.c
index 89bba21ed6..c515259ee7 100644
--- a/source4/libcli/util/clierror.c
+++ b/source4/libcli/raw/clierror.c
@@ -66,7 +66,7 @@ NTSTATUS smbcli_nt_error(struct smbcli_tree *tree)
/* Return true if the last packet was an error */
-BOOL smbcli_is_error(struct smbcli_tree *tree)
+bool smbcli_is_error(struct smbcli_tree *tree)
{
return NT_STATUS_IS_ERR(smbcli_nt_error(tree));
}
diff --git a/source4/libcli/raw/interfaces.h b/source4/libcli/raw/interfaces.h
index 23de6c3838..00ab788184 100644
--- a/source4/libcli/raw/interfaces.h
+++ b/source4/libcli/raw/interfaces.h
@@ -23,6 +23,7 @@
#define __LIBCLI_RAW_INTERFACES_H__
#include "smb.h"
+#include "librpc/gen_ndr/misc.h" /* for struct GUID */
/* this structure is just a wrapper for a string, the only reason we
bother with this is that it allows us to check the length provided
diff --git a/source4/libcli/util/doserr.h b/source4/libcli/util/doserr.h
index 0478eff947..bec268a565 100644
--- a/source4/libcli/util/doserr.h
+++ b/source4/libcli/util/doserr.h
@@ -161,133 +161,8 @@
#define ERRsharebufexc 36 /* share buffer exceeded */
#define ERRdiskfull 39
-
-/* these are win32 error codes. There are only a few places where
- these matter for Samba, primarily in the NT printing code */
-#define WERR_OK W_ERROR(0)
-#define WERR_BADFUNC W_ERROR(1)
-#define WERR_BADFILE W_ERROR(2)
-#define WERR_ACCESS_DENIED W_ERROR(5)
-#define WERR_BADFID W_ERROR(6)
-#define WERR_NOMEM W_ERROR(8)
-#define WERR_GENERAL_FAILURE W_ERROR(31)
-#define WERR_NOT_SUPPORTED W_ERROR(50)
-#define WERR_BAD_NETPATH W_ERROR(53)
-#define WERR_BAD_NET_RESP W_ERROR(58)
-#define WERR_UNEXP_NET_ERR W_ERROR(59)
-#define WERR_PRINTQ_FULL W_ERROR(61)
-#define WERR_NO_SPOOL_SPACE W_ERROR(62)
-#define WERR_NO_SUCH_SHARE W_ERROR(67)
-#define WERR_FILE_EXISTS W_ERROR(80)
-#define WERR_BAD_PASSWORD W_ERROR(86)
-#define WERR_INVALID_PARAM W_ERROR(87)
-#define WERR_INSUFFICIENT_BUFFER W_ERROR(122)
-#define WERR_INVALID_NAME W_ERROR(123)
-#define WERR_UNKNOWN_LEVEL W_ERROR(124)
-#define WERR_OBJECT_PATH_INVALID W_ERROR(161)
-#define WERR_ALREADY_EXISTS W_ERROR(183)
-#define WERR_NO_MORE_ITEMS W_ERROR(259)
-#define WERR_MORE_DATA W_ERROR(234)
-#define WERR_CAN_NOT_COMPLETE W_ERROR(1003)
-#define WERR_NOT_FOUND W_ERROR(1168)
-#define WERR_INVALID_COMPUTERNAME W_ERROR(1210)
-#define WERR_INVALID_DOMAINNAME W_ERROR(1212)
-#define WERR_UNKNOWN_REVISION W_ERROR(1305)
-#define WERR_REVISION_MISMATCH W_ERROR(1306)
-#define WERR_INVALID_OWNER W_ERROR(1307)
-#define WERR_NO_LOGON_SERVERS W_ERROR(1311)
-#define WERR_NO_SUCH_PRIVILEGE W_ERROR(1313)
-#define WERR_PRIVILEGE_NOT_HELD W_ERROR(1314)
-#define WERR_NO_SUCH_USER W_ERROR(1317)
-#define WERR_LOGON_FAILURE W_ERROR(1326)
-#define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338)
-#define WERR_INVALID_DOMAIN_ROLE W_ERROR(1354)
-#define WERR_NO_SUCH_DOMAIN W_ERROR(1355)
-#define WERR_NO_SYSTEM_RESOURCES W_ERROR(1450)
-#define WERR_SERVER_UNAVAILABLE W_ERROR(1722)
-#define WERR_INVALID_FORM_NAME W_ERROR(1902)
-#define WERR_INVALID_FORM_SIZE W_ERROR(1903)
-#define WERR_ALREADY_SHARED W_ERROR(2118)
-#define WERR_BUF_TOO_SMALL W_ERROR(2123)
-#define WERR_JOB_NOT_FOUND W_ERROR(2151)
-#define WERR_DEST_NOT_FOUND W_ERROR(2152)
-#define WERR_SESSION_NOT_FOUND W_ERROR(2312)
-#define WERR_FID_NOT_FOUND W_ERROR(2314)
-#define WERR_NOT_LOCAL_DOMAIN W_ERROR(2320)
-#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(2453)
-#define WERR_DEVICE_NOT_AVAILABLE W_ERROR(4319)
-#define WERR_STATUS_MORE_ENTRIES W_ERROR(0x0105)
-
-#define WERR_PRINTER_DRIVER_ALREADY_INSTALLED W_ERROR(ERRdriveralreadyinstalled)
-#define WERR_UNKNOWN_PORT W_ERROR(ERRunknownprinterport)
-#define WERR_UNKNOWN_PRINTER_DRIVER W_ERROR(ERRunknownprinterdriver)
-#define WERR_UNKNOWN_PRINTPROCESSOR W_ERROR(ERRunknownprintprocessor)
-#define WERR_INVALID_SEPARATOR_FILE W_ERROR(ERRinvalidseparatorfile)
-#define WERR_INVALID_PRIORITY W_ERROR(ERRinvalidjobpriority)
-#define WERR_INVALID_PRINTER_NAME W_ERROR(ERRinvalidprintername)
-#define WERR_PRINTER_ALREADY_EXISTS W_ERROR(ERRprinteralreadyexists)
-#define WERR_INVALID_PRINTER_COMMAND W_ERROR(ERRinvalidprintercommand)
-#define WERR_INVALID_DATATYPE W_ERROR(ERRinvaliddatatype)
-#define WERR_INVALID_ENVIRONMENT W_ERROR(ERRinvalidenvironment)
-
-#define WERR_UNKNOWN_PRINT_MONITOR W_ERROR(ERRunknownprintmonitor)
-#define WERR_PRINTER_DRIVER_IN_USE W_ERROR(ERRprinterdriverinuse)
-#define WERR_SPOOL_FILE_NOT_FOUND W_ERROR(ERRspoolfilenotfound)
-#define WERR_SPL_NO_STARTDOC W_ERROR(ERRnostartdoc)
-#define WERR_SPL_NO_ADDJOB W_ERROR(ERRnoaddjob)
-#define WERR_PRINT_PROCESSOR_ALREADY_INSTALLED W_ERROR(ERRprintprocessoralreadyinstalled)
-#define WERR_PRINT_MONITOR_ALREADY_INSTALLED W_ERROR(ERRprintmonitoralreadyinstalled)
-#define WERR_INVALID_PRINT_MONITOR W_ERROR(ERRinvalidprintmonitor)
-#define WERR_PRINT_MONITOR_IN_USE W_ERROR(ERRprintmonitorinuse)
-#define WERR_PRINTER_HAS_JOBS_QUEUED W_ERROR(ERRprinterhasjobsqueued)
-
-#define WERR_CLASS_NOT_REGISTERED W_ERROR(0x40154)
-#define WERR_NO_SHUTDOWN_IN_PROGRESS W_ERROR(0x45c)
-#define WERR_SHUTDOWN_ALREADY_IN_PROGRESS W_ERROR(0x45b)
-
-
#ifndef NERR_BASE
#define NERR_BASE (2100)
#endif
-#define WERR_NET_NAME_NOT_FOUND W_ERROR(NERR_BASE+210)
-#define WERR_DEVICE_NOT_SHARED W_ERROR(NERR_BASE+211)
-
-/* DFS errors */
-#define WERR_DFS_NO_SUCH_VOL W_ERROR(NERR_BASE+562)
-#define WERR_DFS_NO_SUCH_SHARE W_ERROR(NERR_BASE+565)
-#define WERR_DFS_NO_SUCH_SERVER W_ERROR(NERR_BASE+573)
-#define WERR_DFS_INTERNAL_ERROR W_ERROR(NERR_BASE+590)
-#define WERR_DFS_CANT_CREATE_JUNCT W_ERROR(NERR_BASE+569)
-
-/* DS errors */
-#define WERR_DS_SERVICE_BUSY W_ERROR(0x0000200e)
-#define WERR_DS_SERVICE_UNAVAILABLE W_ERROR(0x0000200f)
-#define WERR_DS_NO_SUCH_OBJECT W_ERROR(0x00002030)
-#define WERR_DS_OBJ_NOT_FOUND W_ERROR(0x0000208d)
-#define WERR_DS_SCHEMA_NOT_LOADED W_ERROR(0x20de)
-#define WERR_DS_SCHEMA_ALLOC_FAILED W_ERROR(0x20df)
-#define WERR_DS_ATT_SCHEMA_REQ_SYNTAX W_ERROR(0x000020e0)
-#define WERR_DS_DRA_SCHEMA_MISMATCH W_ERROR(0x000020e2)
-#define WERR_DS_DRA_INVALID_PARAMETER W_ERROR(0x000020f5)
-#define WERR_DS_DRA_BAD_DN W_ERROR(0x000020f7)
-#define WERR_DS_DRA_BAD_NC W_ERROR(0x000020f8)
-#define WERR_DS_DRA_INTERNAL_ERROR W_ERROR(0x000020fa)
-#define WERR_DS_DRA_OUT_OF_MEM W_ERROR(0x000020fe)
-#define WERR_DS_SINGLE_VALUE_CONSTRAINT W_ERROR(0x00002081)
-#define WERR_DS_DRA_DB_ERROR W_ERROR(0x00002103)
-#define WERR_DS_DRA_NO_REPLICA W_ERROR(0x00002104)
-#define WERR_DS_DRA_ACCESS_DENIED W_ERROR(0x00002105)
-#define WERR_DS_DNS_LOOKUP_FAILURE W_ERROR(0x0000214c)
-#define WERR_DS_WRONG_LINKED_ATTRIBUTE_SYNTAX W_ERROR(0x00002150)
-#define WERR_DS_NO_MSDS_INTID W_ERROR(0x00002194)
-#define WERR_DS_DUP_MSDS_INTID W_ERROR(0x00002195)
-
-/* SEC errors */
-#define WERR_SEC_E_ENCRYPT_FAILURE W_ERROR(0x80090329)
-#define WERR_SEC_E_DECRYPT_FAILURE W_ERROR(0x80090330)
-#define WERR_SEC_E_ALGORITHM_MISMATCH W_ERROR(0x80090331)
-
-#define WERR_FOOBAR WERR_GENERAL_FAILURE
-
#endif /* _DOSERR_H */
diff --git a/source4/libcli/util/error.h b/source4/libcli/util/error.h
index 8a641c8eb9..dd2de3da75 100644
--- a/source4/libcli/util/error.h
+++ b/source4/libcli/util/error.h
@@ -19,8 +19,33 @@
#ifndef _SAMBA_ERROR_H_
#define _SAMBA_ERROR_H_
-#include "libcli/util/nterr.h"
+#include "libcli/util/werror.h"
#include "libcli/util/doserr.h"
-#include "libcli/util/proto.h"
+#include "libcli/util/ntstatus.h"
+
+/** NT error on DOS connection! (NT_STATUS_OK) */
+bool ntstatus_dos_equal(NTSTATUS status1, NTSTATUS status2);
+
+/*****************************************************************************
+convert a NT status code to a dos class/code
+ *****************************************************************************/
+void ntstatus_to_dos(NTSTATUS ntstatus, uint8_t *eclass, uint32_t *ecode);
+
+/*****************************************************************************
+convert a WERROR to a NT status32 code
+ *****************************************************************************/
+NTSTATUS werror_to_ntstatus(WERROR error);
+
+/*****************************************************************************
+convert a NTSTATUS to a WERROR
+ *****************************************************************************/
+WERROR ntstatus_to_werror(NTSTATUS error);
+
+/*********************************************************************
+ Map an NT error code from a Unix error code.
+*********************************************************************/
+NTSTATUS map_nt_error_from_unix(int unix_error);
+
+
#endif /* _SAMBA_ERROR_H */
diff --git a/source4/libcli/util/nt_status.h b/source4/libcli/util/nt_status.h
deleted file mode 100644
index 8d81aab175..0000000000
--- a/source4/libcli/util/nt_status.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- SMB parameters and setup, plus a whole lot more.
-
- Copyright (C) Andrew Tridgell 2001
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef _NT_STATUS_H
-#define _NT_STATUS_H
-
-#include <stdint.h>
-
-/* the following rather strange looking definitions of NTSTATUS and WERROR
- and there in order to catch common coding errors where different error types
- are mixed up. This is especially important as we slowly convert Samba
- from using BOOL for internal functions
-*/
-
-#if defined(HAVE_IMMEDIATE_STRUCTURES)
-typedef struct {uint32_t v;} NTSTATUS;
-#define NT_STATUS(x) ((NTSTATUS) { x })
-#define NT_STATUS_V(x) ((x).v)
-#else
-typedef uint32_t NTSTATUS;
-#define NT_STATUS(x) (x)
-#define NT_STATUS_V(x) (x)
-#endif
-
-#if defined(HAVE_IMMEDIATE_STRUCTURES)
-typedef struct {uint32_t v;} WERROR;
-#define W_ERROR(x) ((WERROR) { x })
-#define W_ERROR_V(x) ((x).v)
-#else
-typedef uint32_t WERROR;
-#define W_ERROR(x) (x)
-#define W_ERROR_V(x) (x)
-#endif
-
-#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0)
-#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000)
-/* checking for DOS error mapping here is ugly, but unfortunately the
- alternative is a very intrusive rewrite of the torture code */
-#define NT_STATUS_EQUAL(x,y) (NT_STATUS_IS_DOS(x)||NT_STATUS_IS_DOS(y)?ntstatus_dos_equal(x,y):NT_STATUS_V(x) == NT_STATUS_V(y))
-
-#define NT_STATUS_HAVE_NO_MEMORY(x) do { \
- if (!(x)) {\
- return NT_STATUS_NO_MEMORY;\
- }\
-} while (0)
-
-#define NT_STATUS_IS_OK_RETURN(x) do { \
- if (NT_STATUS_IS_OK(x)) {\
- return x;\
- }\
-} while (0)
-
-#define NT_STATUS_NOT_OK_RETURN(x) do { \
- if (!NT_STATUS_IS_OK(x)) {\
- return x;\
- }\
-} while (0)
-
-#define NT_STATUS_IS_ERR_RETURN(x) do { \
- if (NT_STATUS_IS_ERR(x)) {\
- return x;\
- }\
-} while (0)
-
-#define NT_STATUS_NOT_ERR_RETURN(x) do { \
- if (!NT_STATUS_IS_ERR(x)) {\
- return x;\
- }\
-} while (0)
-
-#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0)
-#define W_ERROR_EQUAL(x,y) (W_ERROR_V(x) == W_ERROR_V(y))
-
-#define W_ERROR_HAVE_NO_MEMORY(x) do { \
- if (!(x)) {\
- return WERR_NOMEM;\
- }\
-} while (0)
-
-#define W_ERROR_IS_OK_RETURN(x) do { \
- if (W_ERROR_IS_OK(x)) {\
- return x;\
- }\
-} while (0)
-
-#define W_ERROR_NOT_OK_RETURN(x) do { \
- if (!W_ERROR_IS_OK(x)) {\
- return x;\
- }\
-} while (0)
-
-/* this defines special NTSTATUS codes to represent DOS errors. I
- have chosen this macro to produce status codes in the invalid
- NTSTATUS range */
-#define NT_STATUS_DOS(class, code) NT_STATUS(0xF1000000 | ((class)<<16) | code)
-#define NT_STATUS_IS_DOS(status) ((NT_STATUS_V(status) & 0xFF000000) == 0xF1000000)
-#define NT_STATUS_DOS_CLASS(status) ((NT_STATUS_V(status) >> 16) & 0xFF)
-#define NT_STATUS_DOS_CODE(status) (NT_STATUS_V(status) & 0xFFFF)
-
-/* define ldap error codes as NTSTATUS codes */
-#define NT_STATUS_LDAP(code) NT_STATUS(0xF2000000 | code)
-#define NT_STATUS_IS_LDAP(status) ((NT_STATUS_V(status) & 0xFF000000) == 0xF2000000)
-#define NT_STATUS_LDAP_CODE(status) (NT_STATUS_V(status) & ~0xFF000000)
-
-#endif
diff --git a/source4/libcli/util/nterr.h b/source4/libcli/util/ntstatus.h
index 1ee867a0aa..026b5162db 100644
--- a/source4/libcli/util/nterr.h
+++ b/source4/libcli/util/ntstatus.h
@@ -20,8 +20,24 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _NTERR_H
-#define _NTERR_H
+#ifndef _NTSTATUS_H
+#define _NTSTATUS_H
+
+/* the following rather strange looking definitions of NTSTATUS
+ are there in order to catch common coding errors where different error types
+ are mixed up. This is especially important as we slowly convert Samba
+ from using bool for internal functions
+*/
+
+#if defined(HAVE_IMMEDIATE_STRUCTURES)
+typedef struct {uint32_t v;} NTSTATUS;
+#define NT_STATUS(x) ((NTSTATUS) { x })
+#define NT_STATUS_V(x) ((x).v)
+#else
+typedef uint32_t NTSTATUS;
+#define NT_STATUS(x) (x)
+#define NT_STATUS_V(x) (x)
+#endif
/* Win32 Status codes. */
@@ -585,4 +601,75 @@
* this means we need a torture test */
#define NT_STATUS_FOOBAR NT_STATUS_UNSUCCESSFUL
-#endif /* _NTERR_H */
+/*****************************************************************************
+ returns an NT error message. not amazingly helpful, but better than a number.
+ *****************************************************************************/
+const char *nt_errstr(NTSTATUS nt_code);
+
+/************************************************************************
+ Print friendler version fo NT error code
+ ***********************************************************************/
+const char *get_friendly_nt_error_msg(NTSTATUS nt_code);
+
+/*****************************************************************************
+ returns an NT_STATUS constant as a string for inclusion in autogen C code
+ *****************************************************************************/
+const char *get_nt_error_c_code(NTSTATUS nt_code);
+
+/*****************************************************************************
+ returns the NT_STATUS constant matching the string supplied (as an NTSTATUS)
+ *****************************************************************************/
+NTSTATUS nt_status_string_to_code(const char *nt_status_str);
+
+#define NT_STATUS_IS_OK(x) (NT_STATUS_V(x) == 0)
+#define NT_STATUS_IS_ERR(x) ((NT_STATUS_V(x) & 0xc0000000) == 0xc0000000)
+/* checking for DOS error mapping here is ugly, but unfortunately the
+ alternative is a very intrusive rewrite of the torture code */
+#define NT_STATUS_EQUAL(x,y) (NT_STATUS_IS_DOS(x)||NT_STATUS_IS_DOS(y)?ntstatus_dos_equal(x,y):NT_STATUS_V(x) == NT_STATUS_V(y))
+
+#define NT_STATUS_HAVE_NO_MEMORY(x) do { \
+ if (!(x)) {\
+ return NT_STATUS_NO_MEMORY;\
+ }\
+} while (0)
+
+#define NT_STATUS_IS_OK_RETURN(x) do { \
+ if (NT_STATUS_IS_OK(x)) {\
+ return x;\
+ }\
+} while (0)
+
+#define NT_STATUS_NOT_OK_RETURN(x) do { \
+ if (!NT_STATUS_IS_OK(x)) {\
+ return x;\
+ }\
+} while (0)
+
+#define NT_STATUS_IS_ERR_RETURN(x) do { \
+ if (NT_STATUS_IS_ERR(x)) {\
+ return x;\
+ }\
+} while (0)
+
+#define NT_STATUS_NOT_ERR_RETURN(x) do { \
+ if (!NT_STATUS_IS_ERR(x)) {\
+ return x;\
+ }\
+} while (0)
+
+/* this defines special NTSTATUS codes to represent DOS errors. I
+ have chosen this macro to produce status codes in the invalid
+ NTSTATUS range */
+#define NT_STATUS_DOS(class, code) NT_STATUS(0xF1000000 | ((class)<<16) | code)
+#define NT_STATUS_IS_DOS(status) ((NT_STATUS_V(status) & 0xFF000000) == 0xF1000000)
+#define NT_STATUS_DOS_CLASS(status) ((NT_STATUS_V(status) >> 16) & 0xFF)
+#define NT_STATUS_DOS_CODE(status) (NT_STATUS_V(status) & 0xFFFF)
+
+/* define ldap error codes as NTSTATUS codes */
+#define NT_STATUS_LDAP(code) NT_STATUS(0xF2000000 | code)
+#define NT_STATUS_IS_LDAP(status) ((NT_STATUS_V(status) & 0xFF000000) == 0xF2000000)
+#define NT_STATUS_LDAP_CODE(status) (NT_STATUS_V(status) & ~0xFF000000)
+
+
+
+#endif /* _NTSTATUS_H */
diff --git a/source4/libcli/util/werror.h b/source4/libcli/util/werror.h
new file mode 100644
index 0000000000..0f49514b9f
--- /dev/null
+++ b/source4/libcli/util/werror.h
@@ -0,0 +1,193 @@
+/*
+ Unix SMB/CIFS implementation.
+ SMB parameters and setup, plus a whole lot more.
+
+ Copyright (C) Andrew Tridgell 2001
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _WERROR_H_
+#define _WERROR_H
+
+#include <stdint.h>
+
+/* the following rather strange looking definitions of NTSTATUS and WERROR
+ and there in order to catch common coding errors where different error types
+ are mixed up. This is especially important as we slowly convert Samba
+ from using bool for internal functions
+*/
+
+#if defined(HAVE_IMMEDIATE_STRUCTURES)
+typedef struct {uint32_t v;} WERROR;
+#define W_ERROR(x) ((WERROR) { x })
+#define W_ERROR_V(x) ((x).v)
+#else
+typedef uint32_t WERROR;
+#define W_ERROR(x) (x)
+#define W_ERROR_V(x) (x)
+#endif
+
+#define W_ERROR_IS_OK(x) (W_ERROR_V(x) == 0)
+#define W_ERROR_EQUAL(x,y) (W_ERROR_V(x) == W_ERROR_V(y))
+
+#define W_ERROR_HAVE_NO_MEMORY(x) do { \
+ if (!(x)) {\
+ return WERR_NOMEM;\
+ }\
+} while (0)
+
+#define W_ERROR_IS_OK_RETURN(x) do { \
+ if (W_ERROR_IS_OK(x)) {\
+ return x;\
+ }\
+} while (0)
+
+#define W_ERROR_NOT_OK_RETURN(x) do { \
+ if (!W_ERROR_IS_OK(x)) {\
+ return x;\
+ }\
+} while (0)
+
+/* these are win32 error codes. There are only a few places where
+ these matter for Samba, primarily in the NT printing code */
+#define WERR_OK W_ERROR(0)
+#define WERR_BADFUNC W_ERROR(1)
+#define WERR_BADFILE W_ERROR(2)
+#define WERR_ACCESS_DENIED W_ERROR(5)
+#define WERR_BADFID W_ERROR(6)
+#define WERR_NOMEM W_ERROR(8)
+#define WERR_GENERAL_FAILURE W_ERROR(31)
+#define WERR_NOT_SUPPORTED W_ERROR(50)
+#define WERR_BAD_NETPATH W_ERROR(53)
+#define WERR_BAD_NET_RESP W_ERROR(58)
+#define WERR_UNEXP_NET_ERR W_ERROR(59)
+#define WERR_PRINTQ_FULL W_ERROR(61)
+#define WERR_NO_SPOOL_SPACE W_ERROR(62)
+#define WERR_NO_SUCH_SHARE W_ERROR(67)
+#define WERR_FILE_EXISTS W_ERROR(80)
+#define WERR_BAD_PASSWORD W_ERROR(86)
+#define WERR_INVALID_PARAM W_ERROR(87)
+#define WERR_INSUFFICIENT_BUFFER W_ERROR(122)
+#define WERR_INVALID_NAME W_ERROR(123)
+#define WERR_UNKNOWN_LEVEL W_ERROR(124)
+#define WERR_OBJECT_PATH_INVALID W_ERROR(161)
+#define WERR_ALREADY_EXISTS W_ERROR(183)
+#define WERR_NO_MORE_ITEMS W_ERROR(259)
+#define WERR_MORE_DATA W_ERROR(234)
+#define WERR_CAN_NOT_COMPLETE W_ERROR(1003)
+#define WERR_NOT_FOUND W_ERROR(1168)
+#define WERR_INVALID_COMPUTERNAME W_ERROR(1210)
+#define WERR_INVALID_DOMAINNAME W_ERROR(1212)
+#define WERR_UNKNOWN_REVISION W_ERROR(1305)
+#define WERR_REVISION_MISMATCH W_ERROR(1306)
+#define WERR_INVALID_OWNER W_ERROR(1307)
+#define WERR_NO_LOGON_SERVERS W_ERROR(1311)
+#define WERR_NO_SUCH_PRIVILEGE W_ERROR(1313)
+#define WERR_PRIVILEGE_NOT_HELD W_ERROR(1314)
+#define WERR_NO_SUCH_USER W_ERROR(1317)
+#define WERR_LOGON_FAILURE W_ERROR(1326)
+#define WERR_INVALID_SECURITY_DESCRIPTOR W_ERROR(1338)
+#define WERR_INVALID_DOMAIN_ROLE W_ERROR(1354)
+#define WERR_NO_SUCH_DOMAIN W_ERROR(1355)
+#define WERR_NO_SYSTEM_RESOURCES W_ERROR(1450)
+#define WERR_SERVER_UNAVAILABLE W_ERROR(1722)
+#define WERR_INVALID_FORM_NAME W_ERROR(1902)
+#define WERR_INVALID_FORM_SIZE W_ERROR(1903)
+#define WERR_ALREADY_SHARED W_ERROR(2118)
+#define WERR_BUF_TOO_SMALL W_ERROR(2123)
+#define WERR_JOB_NOT_FOUND W_ERROR(2151)
+#define WERR_DEST_NOT_FOUND W_ERROR(2152)
+#define WERR_SESSION_NOT_FOUND W_ERROR(2312)
+#define WERR_FID_NOT_FOUND W_ERROR(2314)
+#define WERR_NOT_LOCAL_DOMAIN W_ERROR(2320)
+#define WERR_DOMAIN_CONTROLLER_NOT_FOUND W_ERROR(2453)
+#define WERR_DEVICE_NOT_AVAILABLE W_ERROR(4319)
+#define WERR_STATUS_MORE_ENTRIES W_ERROR(0x0105)
+
+#define WERR_PRINTER_DRIVER_ALREADY_INSTALLED W_ERROR(ERRdriveralreadyinstalled)
+#define WERR_UNKNOWN_PORT W_ERROR(ERRunknownprinterport)
+#define WERR_UNKNOWN_PRINTER_DRIVER W_ERROR(ERRunknownprinterdriver)
+#define WERR_UNKNOWN_PRINTPROCESSOR W_ERROR(ERRunknownprintprocessor)
+#define WERR_INVALID_SEPARATOR_FILE W_ERROR(ERRinvalidseparatorfile)
+#define WERR_INVALID_PRIORITY W_ERROR(ERRinvalidjobpriority)
+#define WERR_INVALID_PRINTER_NAME W_ERROR(ERRinvalidprintername)
+#define WERR_PRINTER_ALREADY_EXISTS W_ERROR(ERRprinteralreadyexists)
+#define WERR_INVALID_PRINTER_COMMAND W_ERROR(ERRinvalidprintercommand)
+#define WERR_INVALID_DATATYPE W_ERROR(ERRinvaliddatatype)
+#define WERR_INVALID_ENVIRONMENT W_ERROR(ERRinvalidenvironment)
+
+#define WERR_UNKNOWN_PRINT_MONITOR W_ERROR(ERRunknownprintmonitor)
+#define WERR_PRINTER_DRIVER_IN_USE W_ERROR(ERRprinterdriverinuse)
+#define WERR_SPOOL_FILE_NOT_FOUND W_ERROR(ERRspoolfilenotfound)
+#define WERR_SPL_NO_STARTDOC W_ERROR(ERRnostartdoc)
+#define WERR_SPL_NO_ADDJOB W_ERROR(ERRnoaddjob)
+#define WERR_PRINT_PROCESSOR_ALREADY_INSTALLED W_ERROR(ERRprintprocessoralreadyinstalled)
+#define WERR_PRINT_MONITOR_ALREADY_INSTALLED W_ERROR(ERRprintmonitoralreadyinstalled)
+#define WERR_INVALID_PRINT_MONITOR W_ERROR(ERRinvalidprintmonitor)
+#define WERR_PRINT_MONITOR_IN_USE W_ERROR(ERRprintmonitorinuse)
+#define WERR_PRINTER_HAS_JOBS_QUEUED W_ERROR(ERRprinterhasjobsqueued)
+
+#define WERR_CLASS_NOT_REGISTERED W_ERROR(0x40154)
+#define WERR_NO_SHUTDOWN_IN_PROGRESS W_ERROR(0x45c)
+#define WERR_SHUTDOWN_ALREADY_IN_PROGRESS W_ERROR(0x45b)
+
+#define WERR_NET_NAME_NOT_FOUND W_ERROR(NERR_BASE+210)
+#define WERR_DEVICE_NOT_SHARED W_ERROR(NERR_BASE+211)
+
+/* DFS errors */
+#define WERR_DFS_NO_SUCH_VOL W_ERROR(NERR_BASE+562)
+#define WERR_DFS_NO_SUCH_SHARE W_ERROR(NERR_BASE+565)
+#define WERR_DFS_NO_SUCH_SERVER W_ERROR(NERR_BASE+573)
+#define WERR_DFS_INTERNAL_ERROR W_ERROR(NERR_BASE+590)
+#define WERR_DFS_CANT_CREATE_JUNCT W_ERROR(NERR_BASE+569)
+
+/* DS errors */
+#define WERR_DS_SERVICE_BUSY W_ERROR(0x0000200e)
+#define WERR_DS_SERVICE_UNAVAILABLE W_ERROR(0x0000200f)
+#define WERR_DS_NO_SUCH_OBJECT W_ERROR(0x00002030)
+#define WERR_DS_OBJ_NOT_FOUND W_ERROR(0x0000208d)
+#define WERR_DS_SCHEMA_NOT_LOADED W_ERROR(0x20de)
+#define WERR_DS_SCHEMA_ALLOC_FAILED W_ERROR(0x20df)
+#define WERR_DS_ATT_SCHEMA_REQ_SYNTAX W_ERROR(0x000020e0)
+#define WERR_DS_DRA_SCHEMA_MISMATCH W_ERROR(0x000020e2)
+#define WERR_DS_DRA_INVALID_PARAMETER W_ERROR(0x000020f5)
+#define WERR_DS_DRA_BAD_DN W_ERROR(0x000020f7)
+#define WERR_DS_DRA_BAD_NC W_ERROR(0x000020f8)
+#define WERR_DS_DRA_INTERNAL_ERROR W_ERROR(0x000020fa)
+#define WERR_DS_DRA_OUT_OF_MEM W_ERROR(0x000020fe)
+#define WERR_DS_SINGLE_VALUE_CONSTRAINT W_ERROR(0x00002081)
+#define WERR_DS_DRA_DB_ERROR W_ERROR(0x00002103)
+#define WERR_DS_DRA_NO_REPLICA W_ERROR(0x00002104)
+#define WERR_DS_DRA_ACCESS_DENIED W_ERROR(0x00002105)
+#define WERR_DS_DNS_LOOKUP_FAILURE W_ERROR(0x0000214c)
+#define WERR_DS_WRONG_LINKED_ATTRIBUTE_SYNTAX W_ERROR(0x00002150)
+#define WERR_DS_NO_MSDS_INTID W_ERROR(0x00002194)
+#define WERR_DS_DUP_MSDS_INTID W_ERROR(0x00002195)
+
+/* SEC errors */
+#define WERR_SEC_E_ENCRYPT_FAILURE W_ERROR(0x80090329)
+#define WERR_SEC_E_DECRYPT_FAILURE W_ERROR(0x80090330)
+#define WERR_SEC_E_ALGORITHM_MISMATCH W_ERROR(0x80090331)
+
+#define WERR_FOOBAR WERR_GENERAL_FAILURE
+
+/*****************************************************************************
+ returns a windows error message. not amazingly helpful, but better than a number.
+ *****************************************************************************/
+const char *win_errstr(WERROR werror);
+
+
+
+#endif
diff --git a/source4/libnet/libnet.h b/source4/libnet/libnet.h
index a51fa613a8..03cca1b7fe 100644
--- a/source4/libnet/libnet.h
+++ b/source4/libnet/libnet.h
@@ -18,6 +18,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "librpc/gen_ndr/misc.h"
+
struct libnet_context {
/* here we need:
* a client env context
diff --git a/source4/libnet/userman.h b/source4/libnet/userman.h
index b6302fe4ad..b681c25a16 100644
--- a/source4/libnet/userman.h
+++ b/source4/libnet/userman.h
@@ -17,6 +17,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "librpc/gen_ndr/misc.h"
+
/*
* IO structures for userman.c functions
diff --git a/source4/librpc/idl/dfs.idl b/source4/librpc/idl/dfs.idl
index 30da410a46..50c8a826df 100644
--- a/source4/librpc/idl/dfs.idl
+++ b/source4/librpc/idl/dfs.idl
@@ -2,6 +2,8 @@
dfs interface definition
*/
+import "misc.idl";
+
[ uuid("4fc742e0-4a10-11cf-8273-00aa004ae673"),
version(3.0),
pointer_default(unique),
diff --git a/source4/librpc/idl/dssetup.idl b/source4/librpc/idl/dssetup.idl
index 9c490aebe3..af6350cc43 100644
--- a/source4/librpc/idl/dssetup.idl
+++ b/source4/librpc/idl/dssetup.idl
@@ -2,6 +2,8 @@
dssetup interface definition
*/
+import "misc.idl";
+
[
uuid("3919286a-b10c-11d0-9ba8-00c04fd92ef5"),
version(0.0),
diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl
index 5611c3de18..baf9f23877 100644
--- a/source4/librpc/idl/epmapper.idl
+++ b/source4/librpc/idl/epmapper.idl
@@ -8,6 +8,8 @@ http://www.opengroup.org/onlinepubs/9629399/chap6.htm#tagcjh_11_02_03_01: bindin
*/
+import "misc.idl";
+
[
uuid("e1af8308-5d1f-11c9-91a4-08002b14a0fa"),
version(3.0),
diff --git a/source4/librpc/idl/notify.idl b/source4/librpc/idl/notify.idl
index c4e633c254..6f9ad25f09 100644
--- a/source4/librpc/idl/notify.idl
+++ b/source4/librpc/idl/notify.idl
@@ -7,6 +7,8 @@
the change notify buffers
*/
+import "misc.idl";
+
[
pointer_default(unique)
]
diff --git a/source4/librpc/idl/orpc.idl b/source4/librpc/idl/orpc.idl
index c1faefd3b1..d023865035 100644
--- a/source4/librpc/idl/orpc.idl
+++ b/source4/librpc/idl/orpc.idl
@@ -5,6 +5,8 @@
http://www.ietf.org/internet-drafts/draft-brown-dcom-v1-spec-04.txt
*/
+import "misc.idl";
+
[
pointer_default(unique)
]
diff --git a/source4/librpc/ndr/libndr.h b/source4/librpc/ndr/libndr.h
index 1cad68bf15..5b9089fc6d 100644
--- a/source4/librpc/ndr/libndr.h
+++ b/source4/librpc/ndr/libndr.h
@@ -23,7 +23,7 @@
#include <talloc.h>
#include "lib/util/util.h" /* for discard_const */
#include "lib/charset/charset.h"
-#include "libcli/util/nt_status.h"
+#include "libcli/util/ntstatus.h"
/*
this provides definitions for the libcli/rpc/ MSRPC library
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm b/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
index 071bec297c..75d4c235cb 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/Header.pm
@@ -390,7 +390,6 @@ sub Parse($)
pidl "/* header auto-generated by pidl */\n\n";
if (!is_intree()) {
pidl "#include <util/data_blob.h>\n";
- pidl "#include <gen_ndr/misc.h>\n";
}
pidl "#include <stdint.h>\n";
pidl "\n";
diff --git a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 9a29b72c1d..cd3981bb28 100644
--- a/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/source4/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -2597,7 +2597,7 @@ sub GenerateIncludes($)
# Samba3 has everything in include/includes.h
if (is_intree() != 3) {
- $self->pidl(choose_header("libcli/util/nterr.h", "core/nterr.h"));
+ $self->pidl(choose_header("libcli/util/ntstatus.h", "core/ntstatus.h"));
$self->pidl(choose_header("librpc/gen_ndr/ndr_misc.h", "gen_ndr/ndr_misc.h"));
}
}
diff --git a/source4/smbd/service_stream.h b/source4/smbd/service_stream.h
index 49869d8eed..6eb26a4282 100644
--- a/source4/smbd/service_stream.h
+++ b/source4/smbd/service_stream.h
@@ -23,6 +23,8 @@
#ifndef __SERVICE_STREAM_H__
#define __SERVICE_STREAM_H__
+#include "librpc/gen_ndr/misc.h"
+
/* modules can use the following to determine if the interface has changed
* please increment the version number after each interface change
* with a comment and maybe update struct stream_connection_critical_sizes.
diff --git a/source4/smbd/service_task.h b/source4/smbd/service_task.h
index 54e6d0fa6c..e5bf9ea414 100644
--- a/source4/smbd/service_task.h
+++ b/source4/smbd/service_task.h
@@ -22,6 +22,8 @@
#ifndef __SERVICE_TASK_H__
#define __SERVICE_TASK_H__
+#include "librpc/gen_ndr/misc.h"
+
struct task_server {
struct event_context *event_ctx;
const struct model_ops *model_ops;