Ignore:
Timestamp:
Nov 24, 2016, 1:14:11 PM (9 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to version 4.4.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/lib/util/util.h

    r740 r988  
    1919*/
    2020
    21 #ifndef _SAMBA_UTIL_H_
    22 #define _SAMBA_UTIL_H_
    23 
    24 #include "lib/util/charset/charset.h"
    25 #include "lib/util/attr.h"
    26 
    27 /* for TALLOC_CTX */
    28 #include <talloc.h>
    29 
    30 /**
    31  * @file
    32  * @brief Helpful macros
    33  */
    34 
    35 struct smbsrv_tcon;
    36 
    37 extern const char *logfile;
    38 extern const char *panic_action;
    39 
    40 #include "lib/util/time.h"
    41 #include "lib/util/data_blob.h"
    42 #include "lib/util/xfile.h"
    43 #include "lib/util/byteorder.h"
    44 #include "lib/util/talloc_stack.h"
    45 
    46 /**
    47  * assert macros
    48  */
    49 #ifdef DEVELOPER
    50 #define SMB_ASSERT(b) do { if (!(b)) { \
    51         DEBUG(0,("PANIC: assert failed at %s(%d): %s\n", \
    52                  __FILE__, __LINE__, #b)); smb_panic("assert failed: " #b); }} while(0)
    53 #else
    54 /* redefine the assert macro for non-developer builds */
    55 #define SMB_ASSERT(b) do { if (!(b)) { \
    56         DEBUG(0,("PANIC: assert failed at %s(%d): %s\n", \
    57             __FILE__, __LINE__, #b)); }} while (0)
    58 #endif
    59 
    60 #ifndef ABS
    61 #define ABS(a) ((a)>0?(a):(-(a)))
    62 #endif
    63 
    64 #include "lib/util/memory.h"
    65 
    66 /**
    67  * Write backtrace to debug log
    68  */
    69 _PUBLIC_ void call_backtrace(void);
    70 
    71 /**
    72  Something really nasty happened - panic !
    73 **/
    74 _PUBLIC_ _NORETURN_ void smb_panic(const char *why);
    75 
    76 #if _SAMBA_BUILD_ == 4
    77 /**
    78 setup our fault handlers
    79 **/
    80 _PUBLIC_ void fault_setup(const char *pname);
    81 _PUBLIC_ void fault_setup_disable(void);
    82 #endif
    83 
    84 /**
    85   register a fault handler.
    86   Should only be called once in the execution of smbd.
    87 */
    88 _PUBLIC_ bool register_fault_handler(const char *name, void (*fault_handler)(int sig));
    89 
    90 /* The following definitions come from lib/util/signal.c  */
    91 
    92 
    93 /**
    94  Block sigs.
    95 **/
    96 void BlockSignals(bool block, int signum);
    97 
    98 /**
    99  Catch a signal. This should implement the following semantics:
    100 
    101  1) The handler remains installed after being called.
    102  2) The signal should be blocked during handler execution.
    103 **/
    104 void (*CatchSignal(int signum,void (*handler)(int )))(int);
    105 
    106 /**
    107  Ignore SIGCLD via whatever means is necessary for this OS.
    108 **/
    109 void CatchChild(void);
    110 
    111 /**
    112  Catch SIGCLD but leave the child around so it's status can be reaped.
    113 **/
    114 void CatchChildLeaveStatus(void);
    115 
    116 /* The following definitions come from lib/util/system.c  */
    117 
    118 /**************************************************************************
    119 A wrapper for gethostbyname() that tries avoids looking up hostnames
    120 in the root domain, which can cause dial-on-demand links to come up for no
    121 apparent reason.
    122 ****************************************************************************/
    123 _PUBLIC_ struct hostent *sys_gethostbyname(const char *name);
    124 _PUBLIC_ struct in_addr sys_inet_makeaddr(int net, int host);
    125 
    126 /**
    127  * Wrapper for fork used to invalid pid cache.
    128  **/
    129 _PUBLIC_ pid_t sys_fork(void);
    130 
    131 /**
    132  * Wrapper for getpid. Ensures we only do a system call *once*.
    133  **/
    134 _PUBLIC_ pid_t sys_getpid(void);
    135 
    136 _PUBLIC_ int sys_getpeereid( int s, uid_t *uid);
    137 
    138 struct sockaddr;
    139 
    140 _PUBLIC_ int sys_getnameinfo(const struct sockaddr *psa,
    141                              int salen,
    142                              char *host,
    143                              size_t hostlen,
    144                              char *service,
    145                              size_t servlen,
    146                              int flags);
    147 _PUBLIC_ int sys_connect(int fd, const struct sockaddr * addr);
    148 
    149 /* The following definitions come from lib/util/genrand.c  */
    150 /**
    151  Copy any user given reseed data.
    152 **/
    153 _PUBLIC_ void set_rand_reseed_callback(void (*fn)(void *, int *), void *);
    154 
    155 /**
    156  * Tell the random number generator it needs to reseed.
    157  */
    158 _PUBLIC_ void set_need_random_reseed(void);
    159 
    160 /**
    161  Interface to the (hopefully) good crypto random number generator.
    162  Will use our internal PRNG if more than 40 bytes of random generation
    163  has been requested, otherwise tries to read from /dev/random
    164 **/
    165 _PUBLIC_ void generate_random_buffer(uint8_t *out, int len);
    166 
    167 /**
    168  Interface to the (hopefully) good crypto random number generator.
    169  Will always use /dev/urandom if available.
    170 **/
    171 _PUBLIC_ void generate_secret_buffer(uint8_t *out, int len);
    172 
    173 /**
    174   generate a single random uint32_t
    175 **/
    176 _PUBLIC_ uint32_t generate_random(void);
    177 
    178 /**
    179   very basic password quality checker
    180 **/
    181 _PUBLIC_ bool check_password_quality(const char *s);
    182 
    183 /**
    184  * Generate a random text password.
    185  */
    186 _PUBLIC_ char *generate_random_password(TALLOC_CTX *mem_ctx, size_t min, size_t max);
    187 
    188 /**
    189  Use the random number generator to generate a random string.
    190 **/
    191 _PUBLIC_ char *generate_random_str_list(TALLOC_CTX *mem_ctx, size_t len, const char *list);
    192 
    193 /**
    194  * Generate a random text string consisting of the specified length.
    195  * The returned string will be allocated.
    196  *
    197  * Characters used are: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_-#.,
    198  */
    199 _PUBLIC_ char *generate_random_str(TALLOC_CTX *mem_ctx, size_t len);
    200 
    201 /**
    202  * Generate an array of unique text strings all of the same length.
    203  * The returned strings will be allocated.
    204  * Returns NULL if the number of unique combinations cannot be created.
    205  *
    206  * Characters used are: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_-#.,
    207  */
    208 _PUBLIC_ char** generate_unique_strs(TALLOC_CTX *mem_ctx, size_t len,
    209                                          uint32_t num);
    210 
    211 /* The following definitions come from lib/util/dprintf.c  */
    212 #if _SAMBA_BUILD_ == 4
    213 
    214 _PUBLIC_ void d_set_iconv(smb_iconv_t);
    215 _PUBLIC_ int d_vfprintf(FILE *f, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
    216 _PUBLIC_ int d_fprintf(FILE *f, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
    217 _PUBLIC_ int d_printf(const char *format, ...) PRINTF_ATTRIBUTE(1,2);
    218 _PUBLIC_ void display_set_stderr(void);
    219 #endif
    220 
    221 /* The following definitions come from lib/util/util_str.c  */
    222 
    223 bool next_token_talloc(TALLOC_CTX *ctx,
    224                         const char **ptr,
    225                         char **pp_buff,
    226                         const char *sep);
    227 
    228 /**
    229  * Get the next token from a string, return false if none found.  Handles
    230  * double-quotes.  This version does not trim leading separator characters
    231  * before looking for a token.
    232  */
    233 bool next_token_no_ltrim_talloc(TALLOC_CTX *ctx,
    234                         const char **ptr,
    235                         char **pp_buff,
    236                         const char *sep);
    237 
    238 
    239 /**
    240  Trim the specified elements off the front and back of a string.
    241 **/
    242 _PUBLIC_ bool trim_string(char *s, const char *front, const char *back);
    243 
    244 /**
    245  Find the number of 'c' chars in a string
    246 **/
    247 _PUBLIC_ _PURE_ size_t count_chars(const char *s, char c);
    248 
    249 /**
    250  Safe string copy into a known length string. maxlength does not
    251  include the terminating zero.
    252 **/
    253 _PUBLIC_ char *safe_strcpy(char *dest,const char *src, size_t maxlength);
    254 
    255 /**
    256  Safe string cat into a string. maxlength does not
    257  include the terminating zero.
    258 **/
    259 _PUBLIC_ char *safe_strcat(char *dest, const char *src, size_t maxlength);
    260 
    261 /**
    262  Routine to get hex characters and turn them into a 16 byte array.
    263  the array can be variable length, and any non-hex-numeric
    264  characters are skipped.  "0xnn" or "0Xnn" is specially catered
    265  for.
    266 
    267  valid examples: "0A5D15"; "0x15, 0x49, 0xa2"; "59\ta9\te3\n"
    268 
    269 
    270 **/
    271 _PUBLIC_ size_t strhex_to_str(char *p, size_t p_len, const char *strhex, size_t strhex_len);
    272 
    273 /**
    274  * Parse a hex string and return a data blob.
    275  */
    276 _PUBLIC_ _PURE_ DATA_BLOB strhex_to_data_blob(TALLOC_CTX *mem_ctx, const char *strhex) ;
    277 
    278 /**
    279  * Routine to print a buffer as HEX digits, into an allocated string.
    280  */
    281 _PUBLIC_ void hex_encode(const unsigned char *buff_in, size_t len, char **out_hex_buffer);
    282 
    283 /**
    284  * talloc version of hex_encode()
    285  */
    286 _PUBLIC_ char *hex_encode_talloc(TALLOC_CTX *mem_ctx, const unsigned char *buff_in, size_t len);
    287 
    288 /**
    289  Substitute a string for a pattern in another string. Make sure there is
    290  enough room!
    291 
    292  This routine looks for pattern in s and replaces it with
    293  insert. It may do multiple replacements.
    294 
    295  Any of " ; ' $ or ` in the insert string are replaced with _
    296  if len==0 then the string cannot be extended. This is different from the old
    297  use of len==0 which was for no length checks to be done.
    298 **/
    299 _PUBLIC_ void string_sub(char *s,const char *pattern, const char *insert, size_t len);
    300 
    301 
    302 _PUBLIC_ char *string_sub_talloc(TALLOC_CTX *mem_ctx, const char *s,
    303                                 const char *pattern, const char *insert);
    304 
    305 /**
    306  Similar to string_sub() but allows for any character to be substituted.
    307  Use with caution!
    308  if len==0 then the string cannot be extended. This is different from the old
    309  use of len==0 which was for no length checks to be done.
    310 **/
    311 _PUBLIC_ void all_string_sub(char *s,const char *pattern,const char *insert, size_t len);
    312 
    313 /**
    314  Unescape a URL encoded string, in place.
    315 **/
    316 _PUBLIC_ void rfc1738_unescape(char *buf);
    317 
    318 
    319 /**
    320  * rfc1738_escape
    321  * Returns a static buffer that contains the RFC
    322  * 1738 compliant, escaped version of the given url. (escapes unsafe and % characters)
    323  **/
    324 _PUBLIC_ char *rfc1738_escape(TALLOC_CTX *mem_ctx, const char *url);
    325 
    326 /**
    327  * rfc1738_escape_unescaped
    328  *
    329  * Returns a static buffer that contains
    330  * the RFC 1738 compliant, escaped version of the given url (escapes unsafe chars only)
    331  **/
    332 _PUBLIC_ char *rfc1738_escape_unescaped(TALLOC_CTX *mem_ctx, const char *url);
    333 
    334 /**
    335  * rfc1738_escape_part
    336  * Returns a static buffer that contains the RFC
    337  * 1738 compliant, escaped version of the given url segment. (escapes
    338  * unsafe, reserved and % chars) It would mangle the :// in http://,
    339  * and mangle paths (because of /).
    340  **/
    341 _PUBLIC_ char *rfc1738_escape_part(TALLOC_CTX *mem_ctx, const char *url);
    342 
    343 /**
    344   format a string into length-prefixed dotted domain format, as used in NBT
    345   and in some ADS structures
    346 **/
    347 _PUBLIC_ const char *str_format_nbt_domain(TALLOC_CTX *mem_ctx, const char *s);
    348 
    349 /**
    350  * Add a string to an array of strings.
    351  *
    352  * num should be a pointer to an integer that holds the current
    353  * number of elements in strings. It will be updated by this function.
    354  */
    355 _PUBLIC_ bool add_string_to_array(TALLOC_CTX *mem_ctx,
    356                          const char *str, const char ***strings, int *num);
    357 
    358 /**
    359   varient of strcmp() that handles NULL ptrs
    360 **/
    361 _PUBLIC_ int strcmp_safe(const char *s1, const char *s2);
    362 
    363 /**
    364 return the number of bytes occupied by a buffer in ASCII format
    365 the result includes the null termination
    366 limited by 'n' bytes
    367 **/
    368 _PUBLIC_ size_t ascii_len_n(const char *src, size_t n);
    369 
    370 /**
    371  Set a boolean variable from the text value stored in the passed string.
    372  Returns true in success, false if the passed string does not correctly
    373  represent a boolean.
    374 **/
    375 _PUBLIC_ bool set_boolean(const char *boolean_string, bool *boolean);
    376 
    377 /**
    378  * Parse a string containing a boolean value.
    379  *
    380  * val will be set to the read value.
    381  *
    382  * @retval true if a boolean value was parsed, false otherwise.
    383  */
    384 _PUBLIC_ bool conv_str_bool(const char * str, bool * val);
    385 
    386 #if _SAMBA_BUILD_ == 4
    387 /**
    388  * Convert a size specification like 16K into an integral number of bytes.
    389  **/
    390 _PUBLIC_ bool conv_str_size(const char * str, uint64_t * val);
    391 #endif
    392 
    393 /**
    394  * Parse a uint64_t value from a string
    395  *
    396  * val will be set to the value read.
    397  *
    398  * @retval true if parsing was successful, false otherwise
    399  */
    400 _PUBLIC_ bool conv_str_u64(const char * str, uint64_t * val);
    401 
    402 /**
    403 return the number of bytes occupied by a buffer in CH_UTF16 format
    404 the result includes the null termination
    405 **/
    406 _PUBLIC_ size_t utf16_len(const void *buf);
    407 
    408 /**
    409 return the number of bytes occupied by a buffer in CH_UTF16 format
    410 the result includes the null termination
    411 limited by 'n' bytes
    412 **/
    413 _PUBLIC_ size_t utf16_len_n(const void *src, size_t n);
    414 _PUBLIC_ size_t ucs2_align(const void *base_ptr, const void *p, int flags);
    415 
    416 /**
    417 Do a case-insensitive, whitespace-ignoring string compare.
    418 **/
    419 _PUBLIC_ int strwicmp(const char *psz1, const char *psz2);
    420 
    421 /**
    422  String replace.
    423 **/
    424 _PUBLIC_ void string_replace(char *s, char oldc, char newc);
    425 
    426 /**
    427  * Compare 2 strings.
    428  *
    429  * @note The comparison is case-insensitive.
    430  **/
    431 _PUBLIC_ bool strequal(const char *s1, const char *s2);
    432 
    433 /* The following definitions come from lib/util/util_strlist.c  */
    434 
    435 /* separators for lists */
    436 #ifndef LIST_SEP
    437 #define LIST_SEP " \t,\n\r"
    438 #endif
    439 
    440 /**
    441   build an empty (only NULL terminated) list of strings (for expansion with str_list_add() etc)
    442 */
    443 _PUBLIC_ char **str_list_make_empty(TALLOC_CTX *mem_ctx);
    444 
    445 /**
    446   place the only element 'entry' into a new, NULL terminated string list
    447 */
    448 _PUBLIC_ char **str_list_make_single(TALLOC_CTX *mem_ctx,
    449         const char *entry);
    450 
    451 /**
    452   build a null terminated list of strings from a input string and a
    453   separator list. The separator list must contain characters less than
    454   or equal to 0x2f for this to work correctly on multi-byte strings
    455 */
    456 _PUBLIC_ char **str_list_make(TALLOC_CTX *mem_ctx, const char *string,
    457         const char *sep);
    458 
    459 /**
    460  * build a null terminated list of strings from an argv-like input string
    461  * Entries are separated by spaces and can be enclosed by quotes.
    462  * Does NOT support escaping
    463  */
    464 _PUBLIC_ char **str_list_make_shell(TALLOC_CTX *mem_ctx, const char *string, const char *sep);
    465 
    466 /**
    467  * join a list back to one string
    468  */
    469 _PUBLIC_ char *str_list_join(TALLOC_CTX *mem_ctx, const char **list, char separator);
    470 
    471 /** join a list back to one (shell-like) string; entries
    472  * separated by spaces, using quotes where necessary */
    473 _PUBLIC_ char *str_list_join_shell(TALLOC_CTX *mem_ctx, const char **list, char sep);
    474 
    475 /**
    476   return the number of elements in a string list
    477 */
    478 _PUBLIC_ size_t str_list_length(const char * const *list);
    479 
    480 /**
    481   copy a string list
    482 */
    483 _PUBLIC_ char **str_list_copy(TALLOC_CTX *mem_ctx, const char **list);
    484 
    485 /**
    486    Return true if all the elements of the list match exactly.
    487  */
    488 _PUBLIC_ bool str_list_equal(const char * const *list1, const char * const *list2);
    489 
    490 /**
    491   add an entry to a string list
    492 */
    493 _PUBLIC_ const char **str_list_add(const char **list, const char *s);
    494 
    495 /**
    496   remove an entry from a string list
    497 */
    498 _PUBLIC_ void str_list_remove(const char **list, const char *s);
    499 
    500 /**
    501   return true if a string is in a list
    502 */
    503 _PUBLIC_ bool str_list_check(const char **list, const char *s);
    504 
    505 /**
    506   return true if a string is in a list, case insensitively
    507 */
    508 _PUBLIC_ bool str_list_check_ci(const char **list, const char *s);
    509 /**
    510   append one list to another - expanding list1
    511 */
    512 _PUBLIC_ const char **str_list_append(const char **list1,
    513         const char * const *list2);
    514 
    515 /**
    516  remove duplicate elements from a list
    517 */
    518 _PUBLIC_ const char **str_list_unique(const char **list);
    519 
    520 /*
    521   very useful when debugging complex list related code
    522  */
    523 _PUBLIC_ void str_list_show(const char **list);
    524 
    525 
    526 /**
    527   append one list to another - expanding list1
    528   this assumes the elements of list2 are const pointers, so we can re-use them
    529 */
    530 _PUBLIC_ const char **str_list_append_const(const char **list1,
    531                                             const char **list2);
    532 
    533 /**
    534   add an entry to a string list
    535   this assumes s will not change
    536 */
    537 _PUBLIC_ const char **str_list_add_const(const char **list, const char *s);
    538 
    539 /**
    540   copy a string list
    541   this assumes list will not change
    542 */
    543 _PUBLIC_ const char **str_list_copy_const(TALLOC_CTX *mem_ctx,
    544                                           const char **list);
    545 
    546 /**
    547  * Needed for making an "unconst" list "const"
    548  */
    549 _PUBLIC_ const char **const_str_list(char **list);
    550 
    551 
    552 /* The following definitions come from lib/util/util_file.c  */
    553 
    554 
    555 /**
    556 read a line from a file with possible \ continuation chars.
    557 Blanks at the start or end of a line are stripped.
    558 The string will be allocated if s2 is NULL
    559 **/
    560 _PUBLIC_ char *fgets_slash(char *s2,int maxlen,XFILE *f);
    561 
    562 /**
    563  * Read one line (data until next newline or eof) and allocate it
    564  */
    565 _PUBLIC_ char *afdgets(int fd, TALLOC_CTX *mem_ctx, size_t hint);
    566 
    567 /**
    568 load a file into memory from a fd.
    569 **/
    570 _PUBLIC_ char *fd_load(int fd, size_t *size, size_t maxsize, TALLOC_CTX *mem_ctx);
    571 
    572 
    573 char **file_lines_parse(char *p, size_t size, int *numlines, TALLOC_CTX *mem_ctx);
    574 
    575 /**
    576 load a file into memory
    577 **/
    578 _PUBLIC_ char *file_load(const char *fname, size_t *size, size_t maxsize, TALLOC_CTX *mem_ctx);
    579 
    580 /**
    581 mmap (if possible) or read a file
    582 **/
    583 _PUBLIC_ void *map_file(const char *fname, size_t size);
    584 
    585 /**
    586 load a file into memory and return an array of pointers to lines in the file
    587 must be freed with talloc_free().
    588 **/
    589 _PUBLIC_ char **file_lines_load(const char *fname, int *numlines, size_t maxsize, TALLOC_CTX *mem_ctx);
    590 
    591 /**
    592 load a fd into memory and return an array of pointers to lines in the file
    593 must be freed with talloc_free(). If convert is true calls unix_to_dos on
    594 the list.
    595 **/
    596 _PUBLIC_ char **fd_lines_load(int fd, int *numlines, size_t maxsize, TALLOC_CTX *mem_ctx);
    597 
    598 /**
    599 take a list of lines and modify them to produce a list where \ continues
    600 a line
    601 **/
    602 _PUBLIC_ void file_lines_slashcont(char **lines);
    603 
    604 /**
    605   save a lump of data into a file. Mostly used for debugging
    606 */
    607 _PUBLIC_ bool file_save(const char *fname, const void *packet, size_t length);
    608 _PUBLIC_ int vfdprintf(int fd, const char *format, va_list ap) PRINTF_ATTRIBUTE(2,0);
    609 _PUBLIC_ int fdprintf(int fd, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
    610 _PUBLIC_ bool large_file_support(const char *path);
    611 
    612 /*
    613   compare two files, return true if the two files have the same content
    614  */
    615 bool file_compare(const char *path1, const char *path2);
    616 
    617 /* The following definitions come from lib/util/util.c  */
    618 
    619 
    620 /**
    621  Find a suitable temporary directory. The result should be copied immediately
    622  as it may be overwritten by a subsequent call.
    623 **/
    624 _PUBLIC_ const char *tmpdir(void);
    625 
    626 /**
    627  Check if a file exists - call vfs_file_exist for samba files.
    628 **/
    629 _PUBLIC_ bool file_exist(const char *fname);
    630 
    631 /**
    632  Check a files mod time.
    633 **/
    634 _PUBLIC_ time_t file_modtime(const char *fname);
    635 
    636 /**
    637  Check if a directory exists.
    638 **/
    639 _PUBLIC_ bool directory_exist(const char *dname);
    640 
    641 /**
    642  * Try to create the specified directory if it didn't exist.
    643  *
    644  * @retval true if the directory already existed and has the right permissions
    645  * or was successfully created.
    646  */
    647 _PUBLIC_ bool directory_create_or_exist(const char *dname, uid_t uid,
    648                                mode_t dir_perms);
    649 
    650 /**
    651  Set a fd into blocking/nonblocking mode. Uses POSIX O_NONBLOCK if available,
    652  else
    653   if SYSV use O_NDELAY
    654   if BSD use FNDELAY
    655 **/
    656 _PUBLIC_ int set_blocking(int fd, bool set);
    657 
    658 /**
    659  Sleep for a specified number of milliseconds.
    660 **/
    661 _PUBLIC_ void smb_msleep(unsigned int t);
    662 
    663 /**
    664  Get my own name, return in talloc'ed storage.
    665 **/
    666 _PUBLIC_ char* get_myname(TALLOC_CTX *mem_ctx);
    667 
    668 /**
    669  Check if a process exists. Does this work on all unixes?
    670 **/
    671 _PUBLIC_ bool process_exists_by_pid(pid_t pid);
    672 
    673 /**
    674  Simple routine to do POSIX file locking. Cruft in NFS and 64->32 bit mapping
    675  is dealt with in posix.c
    676 **/
    677 _PUBLIC_ bool fcntl_lock(int fd, int op, off_t offset, off_t count, int type);
     21#ifndef __UTIL_SAMBA_UTIL_H__
     22#define __UTIL_SAMBA_UTIL_H__
    67823
    67924/**
     
    68429                  void (*cb)(const char *buf, void *private_data),
    68530                  void *private_data);
     31
     32/**
     33 * Write dump of binary data to a FILE
     34 */
     35void dump_data_file(const uint8_t *buf, int len, bool omit_zero_bytes,
     36                    FILE *f);
    68637
    68738/**
     
    69546 * Write dump of binary data to the log file.
    69647 *
    697  * The data is only written if the log level is at least level.
    698  * 16 zero bytes in a row are omitted
     48 * The data is only written if the log level is at least level for
     49 * debug class dbgc_class.
    69950 */
    700 _PUBLIC_ void dump_data_skip_zeros(int level, const uint8_t *buf, int len);
     51_PUBLIC_ void dump_data_dbgc(int dbgc_class, int level, const uint8_t *buf, int len);
    70152
    702 /**
    703  malloc that aborts with smb_panic on fail or zero size.
    704 **/
    705 _PUBLIC_ void *smb_xmalloc(size_t size);
    706 
    707 /**
    708  Memdup with smb_panic on fail.
    709 **/
    710 _PUBLIC_ void *smb_xmemdup(const void *p, size_t size);
    711 
    712 /**
    713  strdup that aborts on malloc fail.
    714 **/
    715 _PUBLIC_ char *smb_xstrdup(const char *s);
    716 
    717 char *smb_xstrndup(const char *s, size_t n);
    718 
    719 /**
    720  Like strdup but for memory.
    721 **/
    722 _PUBLIC_ void *memdup(const void *p, size_t size);
    723 
    724 /**
    725  * Write a password to the log file.
    726  *
    727  * @note Only actually does something if DEBUG_PASSWORD was defined during
    728  * compile-time.
    729  */
    730 _PUBLIC_ void dump_data_pw(const char *msg, const uint8_t * data, size_t len);
    731 
    732 /**
    733  * see if a range of memory is all zero. A NULL pointer is considered
    734  * to be all zero
    735  */
    736 _PUBLIC_ bool all_zero(const uint8_t *ptr, size_t size);
    737 
    738 /**
    739   realloc an array, checking for integer overflow in the array size
    740 */
    741 _PUBLIC_ void *realloc_array(void *ptr, size_t el_size, unsigned count, bool free_on_fail);
    742 
    743 void *malloc_array(size_t el_size, unsigned int count);
    744 
    745 /* The following definitions come from lib/util/fsusage.c  */
    746 
    747 
    748 /**
    749  * Retrieve amount of free disk space.
    750  * this does all of the system specific guff to get the free disk space.
    751  * It is derived from code in the GNU fileutils package, but has been
    752  * considerably mangled for use here
    753  *
    754  * results are returned in *dfree and *dsize, in 512 byte units
    755 */
    756 _PUBLIC_ int sys_fsusage(const char *path, uint64_t *dfree, uint64_t *dsize);
    757 
    758 /* The following definitions come from lib/util/ms_fnmatch.c  */
    759 
    760 
    761 /**
    762  * @file
    763  * @brief MS-style Filename matching
    764  */
    765 
    766 #if _SAMBA_BUILD_ == 4
    767 /* protocol types. It assumes that higher protocols include lower protocols
    768    as subsets. FIXME: Move to one of the smb-specific headers */
    769 enum protocol_types {
    770         PROTOCOL_NONE,
    771         PROTOCOL_CORE,
    772         PROTOCOL_COREPLUS,
    773         PROTOCOL_LANMAN1,
    774         PROTOCOL_LANMAN2,
    775         PROTOCOL_NT1,
    776         PROTOCOL_SMB2
    777 };
    778 
    779 int ms_fnmatch(const char *pattern, const char *string, enum protocol_types protocol);
    780 
    781 /** a generic fnmatch function - uses for non-CIFS pattern matching */
    782 int gen_fnmatch(const char *pattern, const char *string);
    78353#endif
    784 
    785 /* The following definitions come from lib/util/idtree.c  */
    786 
    787 
    788 /**
    789   initialise a idr tree. The context return value must be passed to
    790   all subsequent idr calls. To destroy the idr tree use talloc_free()
    791   on this context
    792  */
    793 _PUBLIC_ struct idr_context *idr_init(TALLOC_CTX *mem_ctx);
    794 
    795 /**
    796   allocate the next available id, and assign 'ptr' into its slot.
    797   you can retrieve later this pointer using idr_find()
    798 */
    799 _PUBLIC_ int idr_get_new(struct idr_context *idp, void *ptr, int limit);
    800 
    801 /**
    802    allocate a new id, giving the first available value greater than or
    803    equal to the given starting id
    804 */
    805 _PUBLIC_ int idr_get_new_above(struct idr_context *idp, void *ptr, int starting_id, int limit);
    806 
    807 /**
    808   allocate a new id randomly in the given range
    809 */
    810 _PUBLIC_ int idr_get_new_random(struct idr_context *idp, void *ptr, int limit);
    811 
    812 /**
    813   find a pointer value previously set with idr_get_new given an id
    814 */
    815 _PUBLIC_ void *idr_find(struct idr_context *idp, int id);
    816 
    817 /**
    818   remove an id from the idr tree
    819 */
    820 _PUBLIC_ int idr_remove(struct idr_context *idp, int id);
    821 
    822 /* The following definitions come from lib/util/become_daemon.c  */
    823 
    824 /**
    825  Close the low 3 fd's and open dev/null in their place
    826 **/
    827 _PUBLIC_ void close_low_fds(bool stderr_too);
    828 
    829 /**
    830  Become a daemon, discarding the controlling terminal.
    831 **/
    832 _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout);
    833 
    834 /**
    835  * Load a ini-style file.
    836  */
    837 bool pm_process( const char *fileName,
    838                  bool (*sfunc)(const char *, void *),
    839                  bool (*pfunc)(const char *, const char *, void *),
    840                                  void *userdata);
    841 
    842 bool unmap_file(void *start, size_t size);
    843 
    844 void print_asc(int level, const uint8_t *buf,int len);
    845 void print_asc_cb(const uint8_t *buf, int len,
    846                   void (*cb)(const char *buf, void *private_data),
    847                   void *private_data);
    848 
    849 /**
    850  * Add an id to an array of ids.
    851  *
    852  * num should be a pointer to an integer that holds the current
    853  * number of elements in ids. It will be updated by this function.
    854  */
    855 
    856 bool add_uid_to_array_unique(TALLOC_CTX *mem_ctx, uid_t uid,
    857                              uid_t **uids, uint32_t *num_uids);
    858 bool add_gid_to_array_unique(TALLOC_CTX *mem_ctx, gid_t gid,
    859                              gid_t **gids, uint32_t *num_gids);
    860 
    861 /**
    862  * Allocate anonymous shared memory of the given size
    863  */
    864 void *anonymous_shared_allocate(size_t bufsz);
    865 void anonymous_shared_free(void *ptr);
    866 
    867 /*
    868   run a command as a child process, with a timeout.
    869 
    870   any stdout/stderr from the child will appear in the Samba logs with
    871   the specified log levels
    872 
    873   If callback is set then the callback is called on completion
    874   with the return code from the command
    875  */
    876 struct tevent_context;
    877 struct tevent_req;
    878 struct tevent_req *samba_runcmd_send(TALLOC_CTX *mem_ctx,
    879                                      struct tevent_context *ev,
    880                                      struct timeval endtime,
    881                                      int stdout_log_level,
    882                                      int stderr_log_level,
    883                                      const char * const *argv0, ...);
    884 int samba_runcmd_recv(struct tevent_req *req, int *perrno);
    885 
    886 #ifdef DEVELOPER
    887 void samba_start_debugger(void);
    888 #endif
    889 
    890 #endif /* _SAMBA_UTIL_H_ */
Note: See TracChangeset for help on using the changeset viewer.