diff options
Diffstat (limited to 'source/lib')
-rw-r--r-- | source/lib/access.c | 2 | ||||
-rw-r--r-- | source/lib/account_pol.c | 8 | ||||
-rw-r--r-- | source/lib/charcnv.c | 15 | ||||
-rw-r--r-- | source/lib/data_blob.c | 2 | ||||
-rw-r--r-- | source/lib/iconv.c | 2 | ||||
-rw-r--r-- | source/lib/ms_fnmatch.c | 4 | ||||
-rw-r--r-- | source/lib/privileges.c | 9 | ||||
-rw-r--r-- | source/lib/secace.c | 2 | ||||
-rw-r--r-- | source/lib/secdesc.c | 4 | ||||
-rw-r--r-- | source/lib/select.c | 26 | ||||
-rw-r--r-- | source/lib/smbldap.c | 7 | ||||
-rw-r--r-- | source/lib/substitute.c | 3 | ||||
-rw-r--r-- | source/lib/system.c | 192 | ||||
-rw-r--r-- | source/lib/system_smbd.c | 4 | ||||
-rw-r--r-- | source/lib/talloc.c | 13 | ||||
-rw-r--r-- | source/lib/time.c | 22 | ||||
-rw-r--r-- | source/lib/util.c | 65 | ||||
-rw-r--r-- | source/lib/util_seaccess.c | 41 | ||||
-rw-r--r-- | source/lib/util_sid.c | 168 | ||||
-rw-r--r-- | source/lib/util_smbd.c | 4 | ||||
-rw-r--r-- | source/lib/util_str.c | 46 | ||||
-rw-r--r-- | source/lib/util_unistr.c | 39 | ||||
-rw-r--r-- | source/lib/util_uuid.c | 2 | ||||
-rw-r--r-- | source/lib/wins_srv.c | 3 |
24 files changed, 202 insertions, 481 deletions
diff --git a/source/lib/access.c b/source/lib/access.c index d8e40c99f76..fcc795d1f26 100644 --- a/source/lib/access.c +++ b/source/lib/access.c @@ -133,7 +133,7 @@ static BOOL string_match(const char *tok,const char *s, char *invalid_char) /* client_match - match host name and address against token */ static BOOL client_match(const char *tok, const char *item) { - const char **client = CONST_ADD(const char **, item); + const char **client = (const char **)item; BOOL match; char invalid_char = '\0'; diff --git a/source/lib/account_pol.c b/source/lib/account_pol.c index 423dc1675a6..72d6e77ddda 100644 --- a/source/lib/account_pol.c +++ b/source/lib/account_pol.c @@ -24,6 +24,14 @@ static TDB_CONTEXT *tdb; #define DATABASE_VERSION 2 +extern DOM_SID global_sid_World; +extern DOM_SID global_sid_Builtin_Administrators; +extern DOM_SID global_sid_Builtin_Account_Operators; +extern DOM_SID global_sid_Builtin_Server_Operators; +extern DOM_SID global_sid_Builtin_Print_Operators; +extern DOM_SID global_sid_Builtin_Backup_Operators; + + /**************************************************************************** Set default for a field if it is empty ****************************************************************************/ diff --git a/source/lib/charcnv.c b/source/lib/charcnv.c index 4fbad0f3d18..b9b9d90db67 100644 --- a/source/lib/charcnv.c +++ b/source/lib/charcnv.c @@ -1269,21 +1269,6 @@ size_t pull_utf8_allocate(char **dest, const char *src) } /** - * Copy a string from a DOS src to a unix char * destination, allocating a buffer using talloc - * - * @param dest always set at least to NULL - * - * @returns The number of bytes occupied by the string in the destination - **/ - -size_t pull_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src) -{ - size_t src_len = strlen(src)+1; - *dest = NULL; - return convert_string_talloc(ctx, CH_DOS, CH_UNIX, src, src_len, (void **)dest, True); -} - -/** Copy a string from a char* src to a unicode or ascii dos codepage destination choosing unicode or ascii based on the flags in the SMB buffer starting at base_ptr. diff --git a/source/lib/data_blob.c b/source/lib/data_blob.c index 35805f861c5..a1c3af2d492 100644 --- a/source/lib/data_blob.c +++ b/source/lib/data_blob.c @@ -47,7 +47,7 @@ DATA_BLOB data_blob(const void *p, size_t length) if (p) { ret.data = smb_xmemdup(p, length); } else { - ret.data = SMB_XMALLOC_ARRAY(unsigned char, length); + ret.data = SMB_XMALLOC_ARRAY(char, length); } ret.length = length; ret.free = free_data_blob; diff --git a/source/lib/iconv.c b/source/lib/iconv.c index f23e4351c02..d58165fed03 100644 --- a/source/lib/iconv.c +++ b/source/lib/iconv.c @@ -135,7 +135,7 @@ static size_t sys_iconv(void *cd, { #ifdef HAVE_NATIVE_ICONV size_t ret = iconv((iconv_t)cd, - CONST_DISCARD(char **, inbuf), inbytesleft, + (char **)inbuf, inbytesleft, outbuf, outbytesleft); if (ret == (size_t)-1) { int saved_errno = errno; diff --git a/source/lib/ms_fnmatch.c b/source/lib/ms_fnmatch.c index c7cf54d26b5..a0cbfd2ee21 100644 --- a/source/lib/ms_fnmatch.c +++ b/source/lib/ms_fnmatch.c @@ -146,7 +146,7 @@ static int ms_fnmatch_core(const smb_ucs2_t *p, const smb_ucs2_t *n, return -1; } -int ms_fnmatch(const char *pattern, const char *string, BOOL translate_pattern, +int ms_fnmatch(const char *pattern, const char *string, enum protocol_types protocol, BOOL is_case_sensitive) { wpstring p, s; @@ -179,7 +179,7 @@ int ms_fnmatch(const char *pattern, const char *string, BOOL translate_pattern, return -1; } - if (translate_pattern) { + if (protocol <= PROTOCOL_LANMAN2) { /* for older negotiated protocols it is possible to translate the pattern to produce a "new style" diff --git a/source/lib/privileges.c b/source/lib/privileges.c index e01561de06f..8b5348e1f25 100644 --- a/source/lib/privileges.c +++ b/source/lib/privileges.c @@ -95,12 +95,7 @@ PRIVS privs[] = { {SE_END, "", ""} }; -typedef struct { - int count; - DOM_SID *list; -} SID_LIST; - -typedef struct { +typedef struct priv_sid_list { SE_PRIV privilege; SID_LIST sids; } PRIV_SID_LIST; @@ -497,7 +492,7 @@ static int priv_traverse_fn(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void *s return 0; } - add_sid_to_array( NULL, &sid, &priv->sids.list, &priv->sids.count ); + add_sid_to_array( &sid, &priv->sids.list, &priv->sids.count ); return 0; } diff --git a/source/lib/secace.c b/source/lib/secace.c index c550dcce311..e44d9aa940e 100644 --- a/source/lib/secace.c +++ b/source/lib/secace.c @@ -57,7 +57,7 @@ void sec_ace_copy(SEC_ACE *ace_dest, SEC_ACE *ace_src) Sets up a SEC_ACE structure. ********************************************************************/ -void init_sec_ace(SEC_ACE *t, const DOM_SID *sid, uint8 type, SEC_ACCESS mask, uint8 flag) +void init_sec_ace(SEC_ACE *t, DOM_SID *sid, uint8 type, SEC_ACCESS mask, uint8 flag) { t->type = type; t->flags = flag; diff --git a/source/lib/secdesc.c b/source/lib/secdesc.c index ace0aee8664..686a4edf77c 100644 --- a/source/lib/secdesc.c +++ b/source/lib/secdesc.c @@ -179,7 +179,7 @@ SEC_DESC_BUF *sec_desc_merge(TALLOC_CTX *ctx, SEC_DESC_BUF *new_sdb, SEC_DESC_BU ********************************************************************/ SEC_DESC *make_sec_desc(TALLOC_CTX *ctx, uint16 revision, uint16 type, - const DOM_SID *owner_sid, const DOM_SID *grp_sid, + DOM_SID *owner_sid, DOM_SID *grp_sid, SEC_ACL *sacl, SEC_ACL *dacl, size_t *sd_size) { SEC_DESC *dst; @@ -269,7 +269,7 @@ SEC_DESC *dup_sec_desc(TALLOC_CTX *ctx, const SEC_DESC *src) Creates a SEC_DESC structure with typical defaults. ********************************************************************/ -SEC_DESC *make_standard_sec_desc(TALLOC_CTX *ctx, const DOM_SID *owner_sid, const DOM_SID *grp_sid, +SEC_DESC *make_standard_sec_desc(TALLOC_CTX *ctx, DOM_SID *owner_sid, DOM_SID *grp_sid, SEC_ACL *dacl, size_t *sd_size) { return make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, diff --git a/source/lib/select.c b/source/lib/select.c index 2e55f9753db..f3d119bdb15 100644 --- a/source/lib/select.c +++ b/source/lib/select.c @@ -99,23 +99,20 @@ int sys_select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *errorfds, s FD_ZERO(writefds); if (errorfds) FD_ZERO(errorfds); - } else if (FD_ISSET(select_pipe[0], readfds2)) { + } + + if (FD_ISSET(select_pipe[0], readfds2)) { char c; saved_errno = errno; if (read(select_pipe[0], &c, 1) == 1) { pipe_read++; - /* Mark Weaver <mark-clist@npsl.co.uk> pointed out a critical - fix to ensure we don't lose signals. We must always - return -1 when the select pipe is set, otherwise if another - fd is also ready (so ret == 2) then we used to eat the - byte in the pipe and lose the signal. JRA. - */ + } + errno = saved_errno; + FD_CLR(select_pipe[0], readfds2); + ret--; + if (ret == 0) { ret = -1; errno = EINTR; - } else { - FD_CLR(select_pipe[0], readfds2); - ret--; - errno = saved_errno; } } @@ -170,12 +167,7 @@ int sys_select_intr(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *errorf ptval->tv_usec = tdif % 1000000; } - /* We must use select and not sys_select here. If we use - sys_select we'd lose the fact a signal occurred when sys_select - read a byte from the pipe. Fix from Mark Weaver - <mark-clist@npsl.co.uk> - */ - ret = select(maxfd, readfds2, writefds2, errorfds2, ptval); + ret = sys_select(maxfd, readfds2, writefds2, errorfds2, ptval); } while (ret == -1 && errno == EINTR); if (readfds) diff --git a/source/lib/smbldap.c b/source/lib/smbldap.c index cf2f03e0a24..68084b04045 100644 --- a/source/lib/smbldap.c +++ b/source/lib/smbldap.c @@ -1066,9 +1066,7 @@ int smbldap_search(struct smbldap_state *ldap_state, while (another_ldap_try(ldap_state, &rc, &attempts, endtime)) rc = ldap_search_s(ldap_state->ldap_struct, base, scope, - utf8_filter, - CONST_DISCARD(char **, attrs), - attrsonly, res); + utf8_filter, attrs, attrsonly, res); SAFE_FREE(utf8_filter); return rc; @@ -1473,8 +1471,7 @@ static BOOL smbldap_check_root_dse(struct smbldap_state *ldap_state, const char } rc = ldap_search_s(ldap_state->ldap_struct, "", LDAP_SCOPE_BASE, - "(objectclass=*)", CONST_DISCARD(char **, attrs), - 0 , &msg); + "(objectclass=*)", attrs, 0 , &msg); if (rc != LDAP_SUCCESS) { DEBUG(3,("smbldap_check_root_dse: Could not search rootDSE\n")); diff --git a/source/lib/substitute.c b/source/lib/substitute.c index af30e900ace..615a8d73b0a 100644 --- a/source/lib/substitute.c +++ b/source/lib/substitute.c @@ -21,8 +21,6 @@ #include "includes.h" -extern struct current_user current_user; - fstring local_machine=""; fstring remote_arch="UNKNOWN"; userdom_struct current_user_info; @@ -802,6 +800,7 @@ char *alloc_sub_conn(connection_struct *conn, const char *str) void standard_sub_snum(int snum, char *str, size_t len) { + extern struct current_user current_user; static uid_t cached_uid = -1; static fstring cached_user; /* calling uidtoname() on every substitute would be too expensive, so diff --git a/source/lib/system.c b/source/lib/system.c index a2e5352aa5f..7434cbe35ee 100644 --- a/source/lib/system.c +++ b/source/lib/system.c @@ -1373,17 +1373,10 @@ ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t si { #if defined(HAVE_GETXATTR) return getxattr(path, name, value, size); -#elif defined(HAVE_EXTATTR_GET_FILE) - char *s; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - return extattr_get_file(path, attrnamespace, attrname, value, size); #elif defined(HAVE_ATTR_GET) int retval, flags = 0; int valuelength = (int)size; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; @@ -1400,17 +1393,10 @@ ssize_t sys_lgetxattr (const char *path, const char *name, void *value, size_t s { #if defined(HAVE_LGETXATTR) return lgetxattr(path, name, value, size); -#elif defined(HAVE_EXTATTR_GET_LINK) - char *s; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - return extattr_get_link(path, attrnamespace, attrname, value, size); #elif defined(HAVE_ATTR_GET) int retval, flags = ATTR_DONTFOLLOW; int valuelength = (int)size; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; @@ -1427,17 +1413,10 @@ ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size) { #if defined(HAVE_FGETXATTR) return fgetxattr(filedes, name, value, size); -#elif defined(HAVE_EXTATTR_GET_FD) - char *s; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - return extattr_get_fd(filedes, attrnamespace, attrname, value, size); #elif defined(HAVE_ATTR_GETF) int retval, flags = 0; int valuelength = (int)size; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; @@ -1450,99 +1429,6 @@ ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size) #endif } -#if defined(HAVE_EXTATTR_LIST_FILE) - -#define EXTATTR_PREFIX(s) (s), (sizeof((s))-1) - -static struct { - int space; - const char *name; - size_t len; -} -extattr[] = { - { EXTATTR_NAMESPACE_SYSTEM, EXTATTR_PREFIX("system.") }, - { EXTATTR_NAMESPACE_USER, EXTATTR_PREFIX("user.") }, -}; - -typedef union { - const char *path; - int filedes; -} extattr_arg; - -static ssize_t bsd_attr_list (int type, extattr_arg arg, char *list, size_t size) -{ - ssize_t list_size, total_size = 0; - int i, t, len; - char *buf; - /* Iterate through extattr(2) namespaces */ - for(t = 0; t < (sizeof(extattr)/sizeof(extattr[0])); t++) { - switch(type) { -#if defined(HAVE_EXTATTR_LIST_FILE) - case 0: - list_size = extattr_list_file(arg.path, extattr[t].space, list, size); - break; -#endif -#if defined(HAVE_EXTATTR_LIST_LINK) - case 1: - list_size = extattr_list_link(arg.path, extattr[t].space, list, size); - break; -#endif -#if defined(HAVE_EXTATTR_LIST_FD) - case 2: - list_size = extattr_list_fd(arg.filedes, extattr[t].space, list, size); - break; -#endif - default: - errno = ENOSYS; - return -1; - } - /* Some error happend. Errno should be set by the previous call */ - if(list_size < 0) - return -1; - /* No attributes */ - if(list_size == 0) - continue; - /* XXX: Call with an empty buffer may be used to calculate - necessary buffer size. Unfortunately, we can't say, how - many attributes were returned, so here is the potential - problem with the emulation. - */ - if(list == NULL) { - /* Take the worse case of one char attribute names - - two bytes per name plus one more for sanity. - */ - total_size += list_size + (list_size/2 + 1)*extattr[t].len; - continue; - } - /* Count necessary offset to fit namespace prefixes */ - len = 0; - for(i = 0; i < list_size; i += list[i] + 1) - len += extattr[t].len; - - total_size += list_size + len; - /* Buffer is too small to fit the results */ - if(total_size > size) { - errno = ERANGE; - return -1; - } - /* Shift the results back, so we can prepend prefixes */ - buf = memmove(list + len, list, list_size); - - for(i = 0; i < list_size; i += len + 1) { - len = buf[i]; - strncpy(list, extattr[t].name, extattr[t].len + 1); - list += extattr[t].len; - strncpy(list, buf + i + 1, len); - list[len] = '\0'; - list += len + 1; - } - size -= total_size; - } - return total_size; -} - -#endif - #if defined(HAVE_ATTR_LIST) && defined(HAVE_SYS_ATTRIBUTES_H) static char attr_buffer[ATTR_MAX_VALUELEN]; @@ -1615,10 +1501,6 @@ ssize_t sys_listxattr (const char *path, char *list, size_t size) { #if defined(HAVE_LISTXATTR) return listxattr(path, list, size); -#elif defined(HAVE_EXTATTR_LIST_FILE) - extattr_arg arg; - arg.path = path; - return bsd_attr_list(0, arg, list, size); #elif defined(HAVE_ATTR_LIST) && defined(HAVE_SYS_ATTRIBUTES_H) return irix_attr_list(path, 0, list, size, 0); #else @@ -1631,10 +1513,6 @@ ssize_t sys_llistxattr (const char *path, char *list, size_t size) { #if defined(HAVE_LLISTXATTR) return llistxattr(path, list, size); -#elif defined(HAVE_EXTATTR_LIST_LINK) - extattr_arg arg; - arg.path = path; - return bsd_attr_list(1, arg, list, size); #elif defined(HAVE_ATTR_LIST) && defined(HAVE_SYS_ATTRIBUTES_H) return irix_attr_list(path, 0, list, size, ATTR_DONTFOLLOW); #else @@ -1647,10 +1525,6 @@ ssize_t sys_flistxattr (int filedes, char *list, size_t size) { #if defined(HAVE_FLISTXATTR) return flistxattr(filedes, list, size); -#elif defined(HAVE_EXTATTR_LIST_FD) - extattr_arg arg; - arg.filedes = filedes; - return bsd_attr_list(2, arg, list, size); #elif defined(HAVE_ATTR_LISTF) return irix_attr_list(NULL, filedes, list, size, 0); #else @@ -1663,16 +1537,9 @@ int sys_removexattr (const char *path, const char *name) { #if defined(HAVE_REMOVEXATTR) return removexattr(path, name); -#elif defined(HAVE_EXTATTR_DELETE_FILE) - char *s; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - return extattr_delete_file(path, attrnamespace, attrname); #elif defined(HAVE_ATTR_REMOVE) int flags = 0; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; @@ -1687,16 +1554,9 @@ int sys_lremovexattr (const char *path, const char *name) { #if defined(HAVE_LREMOVEXATTR) return lremovexattr(path, name); -#elif defined(HAVE_EXTATTR_DELETE_LINK) - char *s; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - return extattr_delete_link(path, attrnamespace, attrname); #elif defined(HAVE_ATTR_REMOVE) int flags = ATTR_DONTFOLLOW; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; @@ -1711,16 +1571,9 @@ int sys_fremovexattr (int filedes, const char *name) { #if defined(HAVE_FREMOVEXATTR) return fremovexattr(filedes, name); -#elif defined(HAVE_EXTATTR_DELETE_FD) - char *s; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - return extattr_delete_fd(filedes, attrnamespace, attrname); #elif defined(HAVE_ATTR_REMOVEF) int flags = 0; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) flags |= ATTR_ROOT; @@ -1740,18 +1593,9 @@ int sys_setxattr (const char *path, const char *name, const void *value, size_t { #if defined(HAVE_SETXATTR) return setxattr(path, name, value, size, flags); -#elif defined(HAVE_EXTATTR_SET_FILE) - char *s; - int retval = 0; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - retval = extattr_set_file(path, attrnamespace, attrname, value, size); - return (retval < 0) ? -1 : 0; #elif defined(HAVE_ATTR_SET) int myflags = 0; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) myflags |= ATTR_ROOT; if (flags & XATTR_CREATE) myflags |= ATTR_CREATE; @@ -1768,18 +1612,9 @@ int sys_lsetxattr (const char *path, const char *name, const void *value, size_t { #if defined(HAVE_LSETXATTR) return lsetxattr(path, name, value, size, flags); -#elif defined(HAVE_EXTATTR_SET_LINK) - char *s; - int retval = 0; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - retval = extattr_set_link(path, attrnamespace, attrname, value, size); - return (retval < 0) ? -1 : 0; #elif defined(HAVE_ATTR_SET) int myflags = ATTR_DONTFOLLOW; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) myflags |= ATTR_ROOT; if (flags & XATTR_CREATE) myflags |= ATTR_CREATE; @@ -1796,18 +1631,9 @@ int sys_fsetxattr (int filedes, const char *name, const void *value, size_t size { #if defined(HAVE_FSETXATTR) return fsetxattr(filedes, name, value, size, flags); -#elif defined(HAVE_EXTATTR_SET_FD) - char *s; - int retval = 0; - int attrnamespace = (strncmp(name, "system", 6) == 0) ? - EXTATTR_NAMESPACE_SYSTEM : EXTATTR_NAMESPACE_USER; - const char *attrname = ((s=strchr_m(name, '.')) == NULL) ? name : s + 1; - - retval = extattr_set_fd(filedes, attrnamespace, attrname, value, size); - return (retval < 0) ? -1 : 0; #elif defined(HAVE_ATTR_SETF) int myflags = 0; - char *attrname = strchr(name,'.') + 1; + char *attrname = strchr(name,'.') +1; if (strncmp(name, "system", 6) == 0) myflags |= ATTR_ROOT; if (flags & XATTR_CREATE) myflags |= ATTR_CREATE; diff --git a/source/lib/system_smbd.c b/source/lib/system_smbd.c index f124983006d..c83eecf1733 100644 --- a/source/lib/system_smbd.c +++ b/source/lib/system_smbd.c @@ -178,10 +178,10 @@ BOOL getgroups_user(const char *user, gid_t primary_gid, groups = NULL; /* Add in primary group first */ - add_gid_to_array_unique(NULL, primary_gid, &groups, &ngrp); + add_gid_to_array_unique(primary_gid, &groups, &ngrp); for (i=0; i<max_grp; i++) - add_gid_to_array_unique(NULL, temp_groups[i], &groups, &ngrp); + add_gid_to_array_unique(temp_groups[i], &groups, &ngrp); *ngroups = ngrp; *ret_groups = groups; diff --git a/source/lib/talloc.c b/source/lib/talloc.c index f5e21299b5a..cafe0654790 100644 --- a/source/lib/talloc.c +++ b/source/lib/talloc.c @@ -338,19 +338,6 @@ char *talloc_strdup(TALLOC_CTX *t, const char *p) return NULL; } -/* strndup with a talloc */ -char *talloc_strndup(TALLOC_CTX *mem_ctx, const char *str, size_t maxlen) -{ - size_t len = strnlen(str, maxlen); - void *ret = TALLOC(mem_ctx, len+1); - - if (ret != NULL) { - memcpy(ret, str, len); - ((char *)ret)[len] = '\0'; - } - return ret; -} - /** strdup_upper with a talloc */ char *talloc_strdup_upper(TALLOC_CTX *t, const char *p) { diff --git a/source/lib/time.c b/source/lib/time.c index 9f94791b581..84004a099be 100644 --- a/source/lib/time.c +++ b/source/lib/time.c @@ -791,25 +791,3 @@ SMB_BIG_INT usec_time_diff(struct timeval *larget, struct timeval *smallt) SMB_BIG_INT sec_diff = larget->tv_sec - smallt->tv_sec; return (sec_diff * 1000000) + (SMB_BIG_INT)(larget->tv_usec - smallt->tv_usec); } - - -/**************************************************************************** - convert ASN.1 GeneralizedTime string to unix-time - returns 0 on failure; Currently ignores timezone. -****************************************************************************/ -time_t generalized_to_unix_time(const char *str) -{ - struct tm tm; - - ZERO_STRUCT(tm); - - if (sscanf(str, "%4d%2d%2d%2d%2d%2d", - &tm.tm_year, &tm.tm_mon, &tm.tm_mday, - &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { - return 0; - } - tm.tm_year -= 1900; - tm.tm_mon -= 1; - - return timegm(&tm); -} diff --git a/source/lib/util.c b/source/lib/util.c index d244e390d22..42ead313a92 100644 --- a/source/lib/util.c +++ b/source/lib/util.c @@ -23,11 +23,6 @@ #include "includes.h" -extern fstring local_machine; -extern char *global_clobber_region_function; -extern unsigned int global_clobber_region_line; -extern fstring remote_arch; - /* Max allowable allococation - 256mb - 0x10000000 */ #define MAX_ALLOC_SIZE (1024*1024*256) @@ -235,6 +230,7 @@ BOOL set_netbios_aliases(const char **str_array) BOOL init_names(void) { + extern fstring local_machine; char *p; int n; @@ -278,11 +274,28 @@ const char *tmpdir(void) } /**************************************************************************** + Determine whether we are in the specified group. +****************************************************************************/ + +BOOL in_group(gid_t group, gid_t current_gid, int ngroups, const gid_t *groups) +{ + int i; + + if (group == current_gid) + return(True); + + for (i=0;i<ngroups;i++) + if (group == groups[i]) + return(True); + + return(False); +} + +/**************************************************************************** Add a gid to an array of gids if it's not already there. ****************************************************************************/ -void add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid, - gid_t **gids, int *num) +void add_gid_to_array_unique(gid_t gid, gid_t **gids, int *num) { int i; @@ -290,11 +303,8 @@ void add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid, if ((*gids)[i] == gid) return; } - - if (mem_ctx != NULL) - *gids = TALLOC_REALLOC_ARRAY(mem_ctx, *gids, gid_t, *num+1); - else - *gids = SMB_REALLOC_ARRAY(*gids, gid_t, *num+1); + + *gids = SMB_REALLOC_ARRAY(*gids, gid_t, *num+1); if (*gids == NULL) return; @@ -607,7 +617,7 @@ void unix_clean_name(char *s) Make a dir struct. ****************************************************************************/ -void make_dir_struct(char *buf, const char *mask, const char *fname,SMB_OFF_T size,int mode,time_t date, BOOL uc) +void make_dir_struct(char *buf, const char *mask, const char *fname,SMB_OFF_T size,int mode,time_t date) { char *p; pstring mask2; @@ -631,9 +641,7 @@ void make_dir_struct(char *buf, const char *mask, const char *fname,SMB_OFF_T si put_dos_date(buf,22,date); SSVAL(buf,26,size & 0xFFFF); SSVAL(buf,28,(size >> 16)&0xFFFF); - /* We only uppercase if FLAGS2_LONG_PATH_COMPONENTS is zero in the input buf. - Strange, but verified on W2K3. Needed for OS/2. JRA. */ - push_ascii(buf+30,fname,12, uc ? STR_UPPER : 0); + push_ascii(buf+30,fname,12,0); DEBUG(8,("put name [%s] from [%s] into dir struct\n",buf+30, fname)); } @@ -1457,6 +1465,8 @@ void smb_panic2(const char *why, BOOL decrement_pid_count ) #ifdef DEVELOPER { + extern char *global_clobber_region_function; + extern unsigned int global_clobber_region_line; if (global_clobber_region_function) { DEBUG(0,("smb_panic: clobber_region() last called from [%s(%u)]\n", @@ -1921,6 +1931,7 @@ void ra_lanman_string( const char *native_lanman ) void set_remote_arch(enum remote_arch_types type) { + extern fstring remote_arch; ra_type = type; switch( type ) { case RA_WFWG: @@ -2161,12 +2172,8 @@ BOOL reg_split_key(const char *full_keyname, uint32 *reg_type, char *key_name) if (strequal(tmp, "HKLM") || strequal(tmp, "HKEY_LOCAL_MACHINE")) (*reg_type) = HKEY_LOCAL_MACHINE; - else if (strequal(tmp, "HKCR") || strequal(tmp, "HKEY_CLASSES_ROOT")) - (*reg_type) = HKEY_CLASSES_ROOT; else if (strequal(tmp, "HKU") || strequal(tmp, "HKEY_USERS")) (*reg_type) = HKEY_USERS; - else if (strequal(tmp, "HKPD")||strequal(tmp, "HKEY_PERFORMANCE_DATA")) - (*reg_type) = HKEY_PERFORMANCE_DATA; else { DEBUG(10,("reg_split_key: unrecognised hive key %s\n", tmp)); return False; @@ -2462,23 +2469,7 @@ BOOL mask_match(const char *string, char *pattern, BOOL is_case_sensitive) if (strcmp(pattern,".") == 0) return False; - return ms_fnmatch(pattern, string, Protocol <= PROTOCOL_LANMAN2, is_case_sensitive) == 0; -} - -/******************************************************************* - A wrapper that handles case sensitivity and the special handling - of the ".." name. Varient that is only called by old search code which requires - pattern translation. -*******************************************************************/ - -BOOL mask_match_search(const char *string, char *pattern, BOOL is_case_sensitive) -{ - if (strcmp(string,"..") == 0) - string = "."; - if (strcmp(pattern,".") == 0) - return False; - - return ms_fnmatch(pattern, string, True, is_case_sensitive) == 0; + return ms_fnmatch(pattern, string, Protocol, is_case_sensitive) == 0; } /******************************************************************* diff --git a/source/lib/util_seaccess.c b/source/lib/util_seaccess.c index 73fc45c844d..b5a9010b5c4 100644 --- a/source/lib/util_seaccess.c +++ b/source/lib/util_seaccess.c @@ -21,7 +21,7 @@ #include "includes.h" -extern NT_USER_TOKEN anonymous_token; +extern DOM_SID global_sid_Builtin; /********************************************************************************* Check an ACE against a SID. We return the remaining needed permission @@ -214,6 +214,7 @@ BOOL se_access_check(const SEC_DESC *sd, const NT_USER_TOKEN *token, uint32 acc_desired, uint32 *acc_granted, NTSTATUS *status) { + extern NT_USER_TOKEN anonymous_token; size_t i; SEC_ACL *the_acl; fstring sid_str; @@ -315,41 +316,3 @@ BOOL se_access_check(const SEC_DESC *sd, const NT_USER_TOKEN *token, return False; } - -/******************************************************************* - samr_make_sam_obj_sd - ********************************************************************/ - -NTSTATUS samr_make_sam_obj_sd(TALLOC_CTX *ctx, SEC_DESC **psd, size_t *sd_size) -{ - DOM_SID adm_sid; - DOM_SID act_sid; - - SEC_ACE ace[3]; - SEC_ACCESS mask; - - SEC_ACL *psa = NULL; - - sid_copy(&adm_sid, &global_sid_Builtin); - sid_append_rid(&adm_sid, BUILTIN_ALIAS_RID_ADMINS); - - sid_copy(&act_sid, &global_sid_Builtin); - sid_append_rid(&act_sid, BUILTIN_ALIAS_RID_ACCOUNT_OPS); - - /*basic access for every one*/ - init_sec_access(&mask, GENERIC_RIGHTS_SAM_EXECUTE | GENERIC_RIGHTS_SAM_READ); - init_sec_ace(&ace[0], &global_sid_World, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - - /*full access for builtin aliases Administrators and Account Operators*/ - init_sec_access(&mask, GENERIC_RIGHTS_SAM_ALL_ACCESS); - init_sec_ace(&ace[1], &adm_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - init_sec_ace(&ace[2], &act_sid, SEC_ACE_TYPE_ACCESS_ALLOWED, mask, 0); - - if ((psa = make_sec_acl(ctx, NT4_ACL_REVISION, 3, ace)) == NULL) - return NT_STATUS_NO_MEMORY; - - if ((*psd = make_sec_desc(ctx, SEC_DESC_REVISION, SEC_DESC_SELF_RELATIVE, NULL, NULL, NULL, psa, sd_size)) == NULL) - return NT_STATUS_NO_MEMORY; - - return NT_STATUS_OK; -} diff --git a/source/lib/util_sid.c b/source/lib/util_sid.c index 1838da1313d..0ba774e184d 100644 --- a/source/lib/util_sid.c +++ b/source/lib/util_sid.c @@ -28,51 +28,29 @@ * Some useful sids */ - -const DOM_SID global_sid_World_Domain = /* Everyone domain */ -{ 1, 0, {0,0,0,0,0,1}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_World = /* Everyone */ -{ 1, 1, {0,0,0,0,0,1}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Creator_Owner_Domain = /* Creator Owner domain */ -{ 1, 0, {0,0,0,0,0,3}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_NT_Authority = /* NT Authority */ -{ 1, 0, {0,0,0,0,0,5}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_System = /* System */ -{ 1, 1, {0,0,0,0,0,5}, {18,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_NULL = /* NULL sid */ -{ 1, 1, {0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Authenticated_Users = /* All authenticated rids */ -{ 1, 1, {0,0,0,0,0,5}, {11,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Network = /* Network rids */ -{ 1, 1, {0,0,0,0,0,5}, {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; - -const DOM_SID global_sid_Creator_Owner = /* Creator Owner */ -{ 1, 1, {0,0,0,0,0,3}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Creator_Group = /* Creator Group */ -{ 1, 1, {0,0,0,0,0,3}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Anonymous = /* Anonymous login */ -{ 1, 1, {0,0,0,0,0,5}, {7,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; - -const DOM_SID global_sid_Builtin = /* Local well-known domain */ -{ 1, 1, {0,0,0,0,0,5}, {32,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Administrators = /* Builtin administrators */ -{ 1, 2, {0,0,0,0,0,5}, {32,544,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Users = /* Builtin users */ -{ 1, 2, {0,0,0,0,0,5}, {32,545,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Guests = /* Builtin guest users */ -{ 1, 2, {0,0,0,0,0,5}, {32,546,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Power_Users = /* Builtin power users */ -{ 1, 2, {0,0,0,0,0,5}, {32,547,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Account_Operators = /* Builtin account operators */ -{ 1, 2, {0,0,0,0,0,5}, {32,548,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Server_Operators = /* Builtin server operators */ -{ 1, 2, {0,0,0,0,0,5}, {32,549,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Print_Operators = /* Builtin print operators */ -{ 1, 2, {0,0,0,0,0,5}, {32,550,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Backup_Operators = /* Builtin backup operators */ -{ 1, 2, {0,0,0,0,0,5}, {32,551,0,0,0,0,0,0,0,0,0,0,0,0,0}}; -const DOM_SID global_sid_Builtin_Replicator = /* Builtin replicator */ -{ 1, 2, {0,0,0,0,0,5}, {32,552,0,0,0,0,0,0,0,0,0,0,0,0,0}}; +DOM_SID global_sid_World_Domain; /* Everyone domain */ +DOM_SID global_sid_World; /* Everyone */ +DOM_SID global_sid_Creator_Owner_Domain; /* Creator Owner domain */ +DOM_SID global_sid_NT_Authority; /* NT Authority */ +DOM_SID global_sid_System; /* System */ +DOM_SID global_sid_NULL; /* NULL sid */ +DOM_SID global_sid_Authenticated_Users; /* All authenticated rids */ +DOM_SID global_sid_Network; /* Network rids */ + +DOM_SID global_sid_Creator_Owner; /* Creator Owner */ +DOM_SID global_sid_Creator_Group; /* Creator Group */ +DOM_SID global_sid_Anonymous; /* Anonymous login */ + +DOM_SID global_sid_Builtin; /* Local well-known domain */ +DOM_SID global_sid_Builtin_Administrators; /* Builtin administrators */ +DOM_SID global_sid_Builtin_Users; /* Builtin users */ +DOM_SID global_sid_Builtin_Guests; /* Builtin guest users */ +DOM_SID global_sid_Builtin_Power_Users; /* Builtin power users */ +DOM_SID global_sid_Builtin_Account_Operators; /* Builtin account operators */ +DOM_SID global_sid_Builtin_Server_Operators; /* Builtin server operators */ +DOM_SID global_sid_Builtin_Print_Operators; /* Builtin print operators */ +DOM_SID global_sid_Builtin_Backup_Operators; /* Builtin backup operators */ +DOM_SID global_sid_Builtin_Replicator; /* Builtin replicator */ #define SECURITY_NULL_SID_AUTHORITY 0 #define SECURITY_WORLD_SID_AUTHORITY 1 @@ -84,15 +62,18 @@ const DOM_SID global_sid_Builtin_Replicator = /* Builtin replicator */ * An NT compatible anonymous token. */ -static DOM_SID anon_sid_array[3] = -{ { 1, 1, {0,0,0,0,0,1}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}, - { 1, 1, {0,0,0,0,0,5}, {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}, - { 1, 1, {0,0,0,0,0,5}, {7,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} }; -NT_USER_TOKEN anonymous_token = { 3, anon_sid_array, SE_NONE }; +static DOM_SID anon_sid_array[3]; + +NT_USER_TOKEN anonymous_token = { + 3, + anon_sid_array +}; -static DOM_SID system_sid_array[1] = -{ { 1, 1, {0,0,0,0,0,5}, {18,0,0,0,0,0,0,0,0,0,0,0,0,0,0}} }; -NT_USER_TOKEN system_token = { 1, system_sid_array, SE_ALL_PRIVS }; +static DOM_SID system_sid_array[4]; +NT_USER_TOKEN system_token = { + 1, + system_sid_array +}; /**************************************************************************** Lookup string names for SID types. @@ -130,12 +111,66 @@ const char *sid_type_lookup(uint32 sid_type) return "SID *TYPE* is INVALID"; } +/**************************************************************************** + Creates some useful well known sids +****************************************************************************/ + +void generate_wellknown_sids(void) +{ + static BOOL initialised = False; + + if (initialised) + return; + + /* SECURITY_NULL_SID_AUTHORITY */ + string_to_sid(&global_sid_NULL, "S-1-0-0"); + + /* SECURITY_WORLD_SID_AUTHORITY */ + string_to_sid(&global_sid_World_Domain, "S-1-1"); + string_to_sid(&global_sid_World, "S-1-1-0"); + + /* SECURITY_CREATOR_SID_AUTHORITY */ + string_to_sid(&global_sid_Creator_Owner_Domain, "S-1-3"); + string_to_sid(&global_sid_Creator_Owner, "S-1-3-0"); + string_to_sid(&global_sid_Creator_Group, "S-1-3-1"); + + /* SECURITY_NT_AUTHORITY */ + string_to_sid(&global_sid_NT_Authority, "S-1-5"); + string_to_sid(&global_sid_Network, "S-1-5-2"); + string_to_sid(&global_sid_Anonymous, "S-1-5-7"); + string_to_sid(&global_sid_Authenticated_Users, "S-1-5-11"); + string_to_sid(&global_sid_System, "S-1-5-18"); + + /* SECURITY_BUILTIN_DOMAIN_RID */ + string_to_sid(&global_sid_Builtin, "S-1-5-32"); + string_to_sid(&global_sid_Builtin_Administrators, "S-1-5-32-544"); + string_to_sid(&global_sid_Builtin_Users, "S-1-5-32-545"); + string_to_sid(&global_sid_Builtin_Guests, "S-1-5-32-546"); + string_to_sid(&global_sid_Builtin_Power_Users, "S-1-5-32-547"); + string_to_sid(&global_sid_Builtin_Account_Operators, "S-1-5-32-548"); + string_to_sid(&global_sid_Builtin_Server_Operators, "S-1-5-32-549"); + string_to_sid(&global_sid_Builtin_Print_Operators, "S-1-5-32-550"); + string_to_sid(&global_sid_Builtin_Backup_Operators, "S-1-5-32-551"); + string_to_sid(&global_sid_Builtin_Replicator, "S-1-5-32-552"); + + /* Create the anon token. */ + sid_copy( &anonymous_token.user_sids[0], &global_sid_World); + sid_copy( &anonymous_token.user_sids[1], &global_sid_Network); + sid_copy( &anonymous_token.user_sids[2], &global_sid_Anonymous); + + /* Create the system token. */ + sid_copy( &system_token.user_sids[0], &global_sid_System); + + initialised = True; +} + /************************************************************************** Create the SYSTEM token. ***************************************************************************/ NT_USER_TOKEN *get_system_token(void) { + generate_wellknown_sids(); /* The token is initialised here */ return &system_token; } @@ -316,19 +351,6 @@ BOOL string_to_sid(DOM_SID *sidout, const char *sidstr) return True; } -DOM_SID *string_sid_talloc(TALLOC_CTX *mem_ctx, const char *sidstr) -{ - DOM_SID *result = TALLOC_P(mem_ctx, DOM_SID); - - if (result == NULL) - return NULL; - - if (!string_to_sid(result, sidstr)) - return NULL; - - return result; -} - /***************************************************************** Add a rid to the end of a sid *****************************************************************/ @@ -630,14 +652,9 @@ DOM_SID *sid_dup_talloc(TALLOC_CTX *ctx, const DOM_SID *src) Add SID to an array SIDs ********************************************************************/ -void add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid, - DOM_SID **sids, int *num) +void add_sid_to_array(const DOM_SID *sid, DOM_SID **sids, int *num) { - if (mem_ctx != NULL) - *sids = TALLOC_REALLOC_ARRAY(mem_ctx, *sids, DOM_SID, - (*num)+1); - else - *sids = SMB_REALLOC_ARRAY(*sids, DOM_SID, (*num)+1); + *sids = SMB_REALLOC_ARRAY(*sids, DOM_SID, (*num)+1); if (*sids == NULL) return; @@ -653,8 +670,7 @@ void add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid, Add SID to an array SIDs ensuring that it is not already there ********************************************************************/ -void add_sid_to_array_unique(TALLOC_CTX *mem_ctx, const DOM_SID *sid, - DOM_SID **sids, int *num_sids) +void add_sid_to_array_unique(const DOM_SID *sid, DOM_SID **sids, int *num_sids) { int i; @@ -663,7 +679,7 @@ void add_sid_to_array_unique(TALLOC_CTX *mem_ctx, const DOM_SID *sid, return; } - add_sid_to_array(mem_ctx, sid, sids, num_sids); + add_sid_to_array(sid, sids, num_sids); } /******************************************************************** diff --git a/source/lib/util_smbd.c b/source/lib/util_smbd.c index c6f6bc0a32a..586362c1e4c 100644 --- a/source/lib/util_smbd.c +++ b/source/lib/util_smbd.c @@ -73,10 +73,10 @@ BOOL getgroups_user(const char *user, gid_t primary_gid, gid_t **ret_groups, int groups = NULL; /* Add in primary group first */ - add_gid_to_array_unique(NULL, primary_gid, &groups, &ngrp); + add_gid_to_array_unique(primary_gid, &groups, &ngrp); for (i=0; i<max_grp; i++) - add_gid_to_array_unique(NULL, temp_groups[i], &groups, &ngrp); + add_gid_to_array_unique(temp_groups[i], &groups, &ngrp); *ngroups = ngrp; *ret_groups = groups; diff --git a/source/lib/util_str.c b/source/lib/util_str.c index 12ee3dc162e..f99c2d1fb32 100644 --- a/source/lib/util_str.c +++ b/source/lib/util_str.c @@ -45,7 +45,7 @@ BOOL next_token(const char **ptr,char *buff, const char *sep, size_t bufsize) if (!ptr) return(False); - s = CONST_DISCARD(char *, *ptr); + s = (char *)*ptr; /* default to simple separators */ if (!sep) @@ -109,7 +109,7 @@ void set_first_token(char *ptr) char **toktocliplist(int *ctok, const char *sep) { - char *s = CONST_DISCARD(char *, last_ptr); + char *s=(char *)last_ptr; int ictok=0; char **ret, **iret; @@ -132,7 +132,7 @@ char **toktocliplist(int *ctok, const char *sep) } while(*s); *ctok=ictok; - s = CONST_DISCARD(char *, last_ptr); + s=(char *)last_ptr; if (!(ret=iret=SMB_MALLOC_ARRAY(char *,ictok+1))) return NULL; @@ -363,16 +363,16 @@ BOOL strisnormal(const char *s, int case_default) NOTE: oldc and newc must be 7 bit characters **/ -void string_replace( pstring s, char oldc, char newc ) +void string_replace(pstring s,char oldc,char newc) { - char *p; + unsigned char *p; /* this is quite a common operation, so we want it to be fast. We optimise for the ascii case, knowing that all our supported multi-byte character sets are ascii-compatible (ie. they match for the first 128 chars) */ - for (p = s; *p; p++) { + for (p = (unsigned char *)s; *p; p++) { if (*p & 0x80) /* mb string - slow path. */ break; if (*p == oldc) @@ -799,7 +799,7 @@ DATA_BLOB strhex_to_data_blob(const char *strhex) { DATA_BLOB ret_blob = data_blob(NULL, strlen(strhex)/2+1); - ret_blob.length = strhex_to_str((char*)ret_blob.data, + ret_blob.length = strhex_to_str(ret_blob.data, strlen(strhex), strhex); @@ -826,7 +826,7 @@ void hex_encode(const unsigned char *buff_in, size_t len, char **out_hex_buffer) Check if a string is part of a list. **/ -BOOL in_list(const char *s, const char *list, BOOL casesensitive) +BOOL in_list(char *s,char *list,BOOL casesensitive) { pstring tok; const char *p=list; @@ -1221,7 +1221,7 @@ char *strchr_m(const char *src, char c) for (s = src; *s && !(((unsigned char)s[0]) & 0x80); s++) { if (*s == c) - return CONST_DISCARD(char *, s); + return (char *)s; } if (!*s) @@ -1238,7 +1238,7 @@ char *strchr_m(const char *src, char c) return NULL; *p = 0; pull_ucs2_pstring(s2, ws); - return CONST_DISCARD(char *, (s+strlen(s2))); + return (char *)(s+strlen(s2)); } char *strrchr_m(const char *s, char c) @@ -1275,7 +1275,7 @@ char *strrchr_m(const char *s, char c) break; } /* No - we have a match ! */ - return CONST_DISCARD(char *, cp); + return (char *)cp; } } while (cp-- != s); if (!got_mb) @@ -1294,7 +1294,7 @@ char *strrchr_m(const char *s, char c) return NULL; *p = 0; pull_ucs2_pstring(s2, ws); - return CONST_DISCARD(char *, (s+strlen(s2))); + return (char *)(s+strlen(s2)); } } @@ -1315,7 +1315,7 @@ char *strnrchr_m(const char *s, char c, unsigned int n) return NULL; *p = 0; pull_ucs2_pstring(s2, ws); - return CONST_DISCARD(char *, (s+strlen(s2))); + return (char *)(s+strlen(s2)); } /*********************************************************************** @@ -1334,7 +1334,7 @@ char *strstr_m(const char *src, const char *findstr) /* for correctness */ if (!findstr[0]) { - return CONST_DISCARD(char *, src); + return src; } /* Samba does single character findstr calls a *lot*. */ @@ -1351,7 +1351,7 @@ char *strstr_m(const char *src, const char *findstr) findstr_len = strlen(findstr); if (strncmp(s, findstr, findstr_len) == 0) { - return CONST_DISCARD(char *, s); + return (char *)s; } } } @@ -1392,7 +1392,7 @@ char *strstr_m(const char *src, const char *findstr) DEBUG(0,("strstr_m: dest malloc fail\n")); return NULL; } - retp = CONST_DISCARD(char *, (s+strlen(s2))); + retp = (char *)(s+strlen(s2)); SAFE_FREE(src_w); SAFE_FREE(find_w); SAFE_FREE(s2); @@ -1695,20 +1695,6 @@ void str_list_free(char ***list) } /****************************************************************************** - *****************************************************************************/ - -int str_list_count( const char **list ) -{ - int i = 0; - - /* count the number of list members */ - - for ( i=0; *list; i++, list++ ); - - return i; -} - -/****************************************************************************** version of standard_sub_basic() for string lists; uses alloc_sub_basic() for the work *****************************************************************************/ diff --git a/source/lib/util_unistr.c b/source/lib/util_unistr.c index 0b4552e1f5d..55a21ebcbbc 100644 --- a/source/lib/util_unistr.c +++ b/source/lib/util_unistr.c @@ -283,19 +283,6 @@ void unistr2_to_ascii(char *dest, const UNISTR2 *str, size_t maxlen) } /******************************************************************* - Convert a (little-endian) UNISTR3 structure to an ASCII string -********************************************************************/ -void unistr3_to_ascii(char *dest, const UNISTR3 *str, size_t maxlen) -{ - if (str == NULL) { - *dest='\0'; - return; - } - pull_ucs2(NULL, dest, str->str.buffer, maxlen, str->uni_str_len*2, - STR_NOALIGN); -} - -/******************************************************************* give a static string for displaying a UNISTR2 ********************************************************************/ const char *unistr2_static(const UNISTR2 *str) @@ -324,6 +311,18 @@ char *unistr2_tdup(TALLOC_CTX *ctx, const UNISTR2 *str) /******************************************************************* +Return a number stored in a buffer +********************************************************************/ + +uint32 buffer2_to_uint32(BUFFER2 *str) +{ + if (str->buf_len == 4) + return IVAL(str->buffer, 0); + else + return 0; +} + +/******************************************************************* Convert a wchar to upper case. ********************************************************************/ @@ -398,10 +397,10 @@ size_t strnlen_w(const smb_ucs2_t *src, size_t max) smb_ucs2_t *strchr_w(const smb_ucs2_t *s, smb_ucs2_t c) { while (*s != 0) { - if (c == *s) return CONST_DISCARD(smb_ucs2_t *, s); + if (c == *s) return (smb_ucs2_t *)s; s++; } - if (c == *s) return CONST_DISCARD(smb_ucs2_t *, s); + if (c == *s) return (smb_ucs2_t *)s; return NULL; } @@ -422,7 +421,7 @@ smb_ucs2_t *strrchr_w(const smb_ucs2_t *s, smb_ucs2_t c) if (len == 0) return NULL; p += (len - 1); do { - if (c == *p) return CONST_DISCARD(smb_ucs2_t *, p); + if (c == *p) return (smb_ucs2_t *)p; } while (p-- != s); return NULL; } @@ -443,7 +442,7 @@ smb_ucs2_t *strnrchr_w(const smb_ucs2_t *s, smb_ucs2_t c, unsigned int n) n--; if (!n) - return CONST_DISCARD(smb_ucs2_t *, p); + return (smb_ucs2_t *)p; } while (p-- != s); return NULL; } @@ -461,7 +460,7 @@ smb_ucs2_t *strstr_w(const smb_ucs2_t *s, const smb_ucs2_t *ins) return NULL; inslen = strlen_w(ins); - r = CONST_DISCARD(smb_ucs2_t *, s); + r = (smb_ucs2_t *)s; while ((r = strchr_w(r, *ins))) { if (strncmp_w(r, ins, inslen) == 0) @@ -732,7 +731,7 @@ smb_ucs2_t *strpbrk_wa(const smb_ucs2_t *s, const char *p) int i; for (i=0; p[i] && *s != UCS2_CHAR(p[i]); i++) ; - if (p[i]) return CONST_DISCARD(smb_ucs2_t *, s); + if (p[i]) return (smb_ucs2_t *)s; s++; } return NULL; @@ -747,7 +746,7 @@ smb_ucs2_t *strstr_wa(const smb_ucs2_t *s, const char *ins) return NULL; inslen = strlen(ins); - r = CONST_DISCARD(smb_ucs2_t *, s); + r = (smb_ucs2_t *)s; while ((r = strchr_w(r, UCS2_CHAR(*ins)))) { if (strncmp_wa(r, ins, inslen) == 0) diff --git a/source/lib/util_uuid.c b/source/lib/util_uuid.c index 8b8e70a36ef..df70740b33c 100644 --- a/source/lib/util_uuid.c +++ b/source/lib/util_uuid.c @@ -94,7 +94,7 @@ BOOL smb_string_to_uuid(const char *in, struct uuid* uu) { BOOL ret = False; const char *ptr = in; - char *end = CONST_DISCARD(char *, in); + char *end = (char *)in; int i; unsigned v1, v2; diff --git a/source/lib/wins_srv.c b/source/lib/wins_srv.c index c139f427ca8..b82e04e13cc 100644 --- a/source/lib/wins_srv.c +++ b/source/lib/wins_srv.c @@ -22,8 +22,6 @@ #include "includes.h" -extern struct in_addr loopback_ip; - /* This is pretty much a complete rewrite of the earlier code. The main aim of the rewrite is to add support for having multiple wins server @@ -282,6 +280,7 @@ struct in_addr wins_srv_ip_tag(const char *tag, struct in_addr src_ip) /* if we are a wins server then we always just talk to ourselves */ if (lp_wins_support()) { + extern struct in_addr loopback_ip; return loopback_ip; } |