The branch, master has been updated
via d73db40 s3-safe_string: Add checked_strlcpy()
via 1d22c39 s3-safe_str: Futher simplify the macros by removing
indirection
via 1923b78 s3-lib Remove the clobber_region() code.
via cd4306b charcnv: remove the automatic fail on allow_badcharcnv true
via 282984f waf: prevent an error in the symbol checking code
via 7aef9c3 s3-config: say which config file we failed to open
from 6e8b635 fault: fixed smb_panic() prototypes
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit d73db405f71002deaddeea68adb747ef1984945c
Author: Andrew Bartlett <[email protected]>
Date: Tue Mar 22 21:03:59 2011 +1100
s3-safe_string: Add checked_strlcpy()
This is strlcpy, just with an extra check of the parameters with
sizeof(), use only where that works.
Andrew Bartlett
Autobuild-User: Andrew Bartlett <[email protected]>
Autobuild-Date: Wed Mar 23 03:39:35 CET 2011 on sn-devel-104
commit 1d22c3919d08b4d18a1d021a407a98cb1402d7d7
Author: Andrew Bartlett <[email protected]>
Date: Tue Mar 22 20:57:36 2011 +1100
s3-safe_str: Futher simplify the macros by removing indirection
Now that we don't need to pass in the function name and string,
another level of indirection can be safely removed, and the operation
of these macros made much clearer.
Andrew Bartlett
commit 1923b78209aaa2aa926dedd19e6c97fb449c48c8
Author: Andrew Bartlett <[email protected]>
Date: Tue Mar 22 15:30:43 2011 +1100
s3-lib Remove the clobber_region() code.
This code wrote to the full buffer in fstrcpy(), pstrcpy() and other
fixed-length string manipulation functions.
The hope of this code was to find out at run time if we were mixing up
pstring and fstring etc, and to record where this came from. It has a
runtime performance impact (particularly if compiled with
--enable-developer).
It is being removed because of the complexity it adds, and the
distinct lack of bugs that this complexity has been credited in
finding.
The macro-based compile-time checking of string sizes remains.
Andrew Bartlett
commit cd4306b01e4097b76777a9a85cc226e8b0e8f613
Author: Andrew Tridgell <[email protected]>
Date: Wed Mar 23 12:16:44 2011 +1100
charcnv: remove the automatic fail on allow_badcharcnv true
we should just fail the call if the string really is bad
commit 282984fdffee349ac60064de73f13f6e7e288b2f
Author: Andrew Tridgell <[email protected]>
Date: Wed Mar 23 12:15:33 2011 +1100
waf: prevent an error in the symbol checking code
commit 7aef9c3fe01f7ebda8a76a4e849c61c21de8cac4
Author: Andrew Tridgell <[email protected]>
Date: Wed Mar 23 11:22:15 2011 +1100
s3-config: say which config file we failed to open
saves having to strace it to work that out
-----------------------------------------------------------------------
Summary of changes:
buildtools/wafsamba/symbols.py | 3 +-
lib/util/charset/charcnv.c | 5 --
source3/Makefile.in | 2 +-
source3/include/proto.h | 59 ++++++--------------
source3/include/safe_string.h | 115 ++++++++++++----------------------------
source3/lib/charcnv.c | 90 ++++++++-----------------------
source3/lib/clobber.c | 63 ----------------------
source3/lib/util.c | 14 -----
source3/lib/util_sock.c | 4 --
source3/lib/util_str.c | 63 +++++-----------------
source3/libsmb/clientgen.c | 7 ---
source3/libsmb/clistr.c | 51 +++++++-----------
source3/nmbd/nmbd.c | 2 +-
source3/smbd/negprot.c | 2 +-
source3/smbd/server.c | 2 +-
source3/smbd/srvstr.c | 5 +-
source3/winbindd/winbindd.c | 2 +-
source3/wscript_build | 2 +-
18 files changed, 120 insertions(+), 371 deletions(-)
delete mode 100644 source3/lib/clobber.c
Changeset truncated at 500 lines:
diff --git a/buildtools/wafsamba/symbols.py b/buildtools/wafsamba/symbols.py
index 0d0af79..0e862cb 100644
--- a/buildtools/wafsamba/symbols.py
+++ b/buildtools/wafsamba/symbols.py
@@ -361,7 +361,8 @@ def check_syslib_dependencies(bld, t):
features = TO_LIST(t.features)
if 'pyembed' in features or 'pyext' in features:
- t.unsatisfied_symbols =
t.unsatisfied_symbols.difference(bld.env.public_symbols['python'])
+ if 'python' in bld.env.public_symbols:
+ t.unsatisfied_symbols =
t.unsatisfied_symbols.difference(bld.env.public_symbols['python'])
needed = {}
for sym in t.unsatisfied_symbols:
diff --git a/lib/util/charset/charcnv.c b/lib/util/charset/charcnv.c
index dd2c725..9b93312 100644
--- a/lib/util/charset/charcnv.c
+++ b/lib/util/charset/charcnv.c
@@ -134,11 +134,6 @@ _PUBLIC_ bool convert_string_convenience(struct
smb_iconv_convenience *ic,
char* outbuf = (char*)dest;
smb_iconv_t descriptor;
- if (allow_badcharcnv) {
- /* Not implemented yet */
- return false;
- }
-
if (srclen == (size_t)-1)
srclen = strlen(inbuf)+1;
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 065f0cb..01245c1 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -450,7 +450,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \
lib/access.o lib/smbrun.o \
lib/bitmap.o lib/dprintf.o $(UTIL_REG_OBJ) \
lib/wins_srv.o \
- lib/util_str.o lib/clobber.o lib/util_sid.o \
+ lib/util_str.o lib/util_sid.o \
lib/util_unistr.o ../lib/util/charset/codepoints.o lib/util_file.o \
lib/util.o lib/util_names.o \
lib/util_sock.o lib/sock_exec.o lib/util_sec.o \
diff --git a/source3/include/proto.h b/source3/include/proto.h
index bb9241c..0f313d6 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -449,25 +449,19 @@ bool pull_ucs2_talloc(TALLOC_CTX *ctx, char **dest, const
smb_ucs2_t *src,
size_t *converted_size);
bool pull_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src,
size_t *converted_size);
-size_t push_string_check_fn(const char *function, unsigned int line,
- void *dest, const char *src,
+size_t push_string_check_fn(void *dest, const char *src,
size_t dest_len, int flags);
-size_t push_string_base(const char *function, unsigned int line,
- const char *base, uint16 flags2,
+size_t push_string_base(const char *base, uint16 flags2,
void *dest, const char *src,
size_t dest_len, int flags);
-size_t pull_string_fn(const char *function,
- unsigned int line,
- const void *base_ptr,
+size_t pull_string_fn(const void *base_ptr,
uint16 smb_flags2,
char *dest,
const void *src,
size_t dest_len,
size_t src_len,
int flags);
-size_t pull_string_talloc_fn(const char *function,
- unsigned int line,
- TALLOC_CTX *ctx,
+size_t pull_string_talloc_fn(TALLOC_CTX *ctx,
const void *base_ptr,
uint16 smb_flags2,
char **ppdest,
@@ -479,10 +473,6 @@ codepoint_t next_codepoint_ext(const char *str, charset_t
src_charset,
size_t *bytes_consumed);
codepoint_t next_codepoint(const char *str, size_t *size);
-/* The following definitions come from lib/clobber.c */
-
-void clobber_region(const char *fn, unsigned int line, char *dest, size_t len);
-
/* The following definitions come from lib/conn_tdb.c */
struct db_record *connections_fetch_entry(TALLOC_CTX *mem_ctx,
@@ -1356,23 +1346,17 @@ size_t str_ascii_charnum(const char *s);
bool trim_char(char *s,char cfront,char cback);
bool strhasupper(const char *s);
bool strhaslower(const char *s);
-char *safe_strcpy_fn(const char *fn,
- int line,
- char *dest,
+char *safe_strcpy_fn(char *dest,
const char *src,
size_t maxlength);
-char *safe_strcat_fn(const char *fn,
- int line,
- char *dest,
+char *safe_strcat_fn(char *dest,
const char *src,
size_t maxlength);
-char *alpha_strcpy_fn(const char *fn,
- int line,
- char *dest,
+char *alpha_strcpy(char *dest,
const char *src,
const char *other_safe_chars,
size_t maxlength);
-char *StrnCpy_fn(const char *fn, int line,char *dest,const char *src,size_t n);
+char *StrnCpy(char *dest,const char *src,size_t n);
bool in_list(const char *s, const char *list, bool casesensitive);
void string_free(char **s);
bool string_set(char **dest,const char *src);
@@ -2333,30 +2317,24 @@ bool spnego_mech_list_blob(TALLOC_CTX *mem_ctx,
/* The following definitions come from libsmb/clistr.c */
-size_t clistr_push_fn(const char *function,
- unsigned int line,
- struct cli_state *cli,
+size_t clistr_push_fn(struct cli_state *cli,
void *dest,
const char *src,
int dest_len,
int flags);
-size_t clistr_pull_fn(const char *function,
- unsigned int line,
- const char *inbuf,
+size_t clistr_pull_fn(const char *inbuf,
char *dest,
const void *src,
int dest_len,
int src_len,
int flags);
-size_t clistr_pull_talloc_fn(const char *function,
- unsigned int line,
- TALLOC_CTX *ctx,
- const char *base,
- uint16_t flags2,
- char **pp_dest,
- const void *src,
- int src_len,
- int flags);
+size_t clistr_pull_talloc(TALLOC_CTX *ctx,
+ const char *base,
+ uint16_t flags2,
+ char **pp_dest,
+ const void *src,
+ int src_len,
+ int flags);
size_t clistr_align_out(struct cli_state *cli, const void *p, int flags);
/* The following definitions come from libsmb/clitrans.c */
@@ -5024,8 +5002,7 @@ bool is_share_read_only_for_token(const char *username,
/* The following definitions come from smbd/srvstr.c */
-size_t srvstr_push_fn(const char *function, unsigned int line,
- const char *base_ptr, uint16 smb_flags2, void *dest,
+size_t srvstr_push_fn(const char *base_ptr, uint16 smb_flags2, void *dest,
const char *src, int dest_len, int flags);
ssize_t message_push_string(uint8 **outbuf, const char *str, int flags);
diff --git a/source3/include/safe_string.h b/source3/include/safe_string.h
index 56e3b67..611f850 100644
--- a/source3/include/safe_string.h
+++ b/source3/include/safe_string.h
@@ -62,14 +62,6 @@
#endif /* !_SPLINT_ */
-#ifdef DEVELOPER
-#define SAFE_STRING_FUNCTION_NAME __FUNCTION__
-#define SAFE_STRING_LINE __LINE__
-#else
-#define SAFE_STRING_FUNCTION_NAME ("")
-#define SAFE_STRING_LINE (0)
-#endif
-
/* We need a number of different prototypes for our
non-existant fuctions */
char * __unsafe_string_function_usage_here__(void);
@@ -94,8 +86,7 @@ size_t __unsafe_string_function_usage_here_char__(void);
safe_strcpy(dest, src, size-PTR_DIFF(dest,base)-1)
/* String copy functions - macro hell below adds 'type checking' (limited,
- but the best we can do in C) and may tag with function name/number to
- record the last 'clobber region' on that string */
+ but the best we can do in C) */
#define fstrcpy(d,s) safe_strcpy((d),(s),sizeof(fstring)-1)
#define fstrcat(d,s) safe_strcat((d),(s),sizeof(fstring)-1)
@@ -106,61 +97,13 @@ size_t __unsafe_string_function_usage_here_char__(void);
* update a lot of code. To make this a little easier here are some
* functions that provide the lengths with less pain */
-/* Inside the _fn variants of these is a call to clobber_region(), -
- * which might destroy the stack on a buggy function. We help the
- * debugging process by putting the function and line who last caused
- * a clobbering into a static buffer. If the program crashes at
- * address 0xf1f1f1f1 then this function is probably, but not
- * necessarily, to blame. */
-
/* overmalloc_safe_strcpy: DEPRECATED! Used when you know the
* destination buffer is longer than maxlength, but you don't know how
* long. This is not a good situation, because we can't do the normal
* sanity checks. Don't use in new code! */
#define overmalloc_safe_strcpy(dest,src,maxlength) \
- safe_strcpy_fn(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- dest,src,maxlength)
-
-#define safe_strcpy(dest,src,maxlength) \
- safe_strcpy_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- dest,src,maxlength)
-
-#define safe_strcat(dest,src,maxlength) \
- safe_strcat_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- dest,src,maxlength)
-
-#define push_string_check(dest, src, dest_len, flags) \
- push_string_check_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- dest, src, dest_len, flags)
-
-#define pull_string_talloc(ctx, base_ptr, smb_flags2, dest, src, src_len,
flags) \
- pull_string_talloc_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- ctx, base_ptr, smb_flags2, dest, src, src_len, flags)
-
-#define clistr_push(cli, dest, src, dest_len, flags) \
- clistr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- cli, dest, src, dest_len, flags)
-
-#define clistr_pull(inbuf, dest, src, dest_len, src_len, flags) \
- clistr_pull_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- inbuf, dest, src, dest_len, src_len, flags)
-
-#define clistr_pull_talloc(ctx, base, flags2, pp_dest, src, src_len, flags) \
- clistr_pull_talloc_fn(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- ctx, base, flags2, pp_dest, src, src_len, flags)
-
-#define srvstr_push(base_ptr, smb_flags2, dest, src, dest_len, flags) \
- srvstr_push_fn2(SAFE_STRING_FUNCTION_NAME, SAFE_STRING_LINE, \
- base_ptr, smb_flags2, dest, src, dest_len, flags)
-
-#define alpha_strcpy(dest,src,other_safe_chars,maxlength) \
- alpha_strcpy_fn(SAFE_STRING_FUNCTION_NAME,SAFE_STRING_LINE, \
- dest,src,other_safe_chars,maxlength)
-
-#define StrnCpy(dest,src,n) \
- StrnCpy_fn(SAFE_STRING_FUNCTION_NAME,SAFE_STRING_LINE, \
- dest,src,n)
+ safe_strcpy_fn(dest,src,maxlength)
#ifdef HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS
@@ -168,48 +111,60 @@ size_t __unsafe_string_function_usage_here_char__(void);
have the correct types (this works only where sizeof() returns the size of
the buffer, not
the size of the pointer). */
-#define safe_strcpy_fn2(fn_name, fn_line, d, s, max_len) \
+#define safe_strcpy(d, s, max_len) \
(CHECK_STRING_SIZE(d, max_len+1) \
? __unsafe_string_function_usage_here__() \
- : safe_strcpy_fn(fn_name, fn_line, (d), (s), (max_len)))
+ : safe_strcpy_fn((d), (s), (max_len)))
-#define safe_strcat_fn2(fn_name, fn_line, d, s, max_len) \
+#define safe_strcat(d, s, max_len) \
(CHECK_STRING_SIZE(d, max_len+1) \
? __unsafe_string_function_usage_here__() \
- : safe_strcat_fn(fn_name, fn_line, (d), (s), (max_len)))
+ : safe_strcat_fn((d), (s), (max_len)))
-#define push_string_check_fn2(fn_name, fn_line, dest, src, dest_len, flags) \
+#define push_string_check(dest, src, dest_len, flags) \
(CHECK_STRING_SIZE(dest, dest_len) \
? __unsafe_string_function_usage_here_size_t__() \
- : push_string_check_fn(fn_name, fn_line, dest, src, dest_len, flags))
+ : push_string_check_fn(dest, src, dest_len, flags))
-#define pull_string_talloc_fn2(fn_name, fn_line, ctx, base_ptr, smb_flags2,
dest, src, src_len, flags) \
- pull_string_talloc_fn(fn_name, fn_line, ctx, base_ptr, smb_flags2, dest,
src, src_len, flags)
+#define pull_string_talloc(ctx, base_ptr, smb_flags2, dest, src, src_len,
flags) \
+ pull_string_talloc_fn(ctx, base_ptr, smb_flags2, dest, src, src_len, flags)
-#define clistr_push_fn2(fn_name, fn_line, cli, dest, src, dest_len, flags) \
+#define clistr_push(cli, dest, src, dest_len, flags) \
(CHECK_STRING_SIZE(dest, dest_len) \
? __unsafe_string_function_usage_here_size_t__() \
- : clistr_push_fn(fn_name, fn_line, cli, dest, src, dest_len, flags))
+ : clistr_push_fn(cli, dest, src, dest_len, flags))
-#define clistr_pull_fn2(fn_name, fn_line, inbuf, dest, src, dest_len, srclen,
flags) \
+#define clistr_pull(inbuf, dest, src, dest_len, srclen, flags) \
(CHECK_STRING_SIZE(dest, dest_len) \
? __unsafe_string_function_usage_here_size_t__() \
- : clistr_pull_fn(fn_name, fn_line, inbuf, dest, src, dest_len, srclen,
flags))
+ : clistr_pull_fn(inbuf, dest, src, dest_len, srclen, flags))
-#define srvstr_push_fn2(fn_name, fn_line, base_ptr, smb_flags2, dest, src,
dest_len, flags) \
+#define srvstr_push(base_ptr, smb_flags2, dest, src, dest_len, flags) \
(CHECK_STRING_SIZE(dest, dest_len) \
? __unsafe_string_function_usage_here_size_t__() \
- : srvstr_push_fn(fn_name, fn_line, base_ptr, smb_flags2, dest, src,
dest_len, flags))
+ : srvstr_push_fn(base_ptr, smb_flags2, dest, src, dest_len, flags))
+
+/* This allows the developer to choose to check the arguments to
+ strlcpy. if the compiler will optimize out function calls, then
+ use this to tell if we are have the correct size buffer (this works only
+ where sizeof() returns the size of the buffer, not the size of the
+ pointer), so stack and static variables only */
+
+#define checked_strlcpy(dest, src, size) \
+ (sizeof(dest) != (size) \
+ ? __unsafe_string_function_usage_here_size_t__() \
+ : strlcpy(dest, src, size))
#else
-#define safe_strcpy_fn2 safe_strcpy_fn
-#define safe_strcat_fn2 safe_strcat_fn
-#define push_string_check_fn2 push_string_check_fn
-#define pull_string_talloc_fn2 pull_string_talloc_fn
-#define clistr_push_fn2 clistr_push_fn
-#define clistr_pull_fn2 clistr_pull_fn
-#define srvstr_push_fn2 srvstr_push_fn
+#define safe_strcpy safe_strcpy_fn
+#define safe_strcat safe_strcat_fn
+#define push_string_check push_string_check_fn
+#define pull_string_talloc pull_string_talloc_fn
+#define clistr_push clistr_push_fn
+#define clistr_pull clistr_pull_fn
+#define srvstr_push srvstr_push_fn
+#define checked_strlcpy strlcpy
#endif
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c
index 5b2149b..1779c4f 100644
--- a/source3/lib/charcnv.c
+++ b/source3/lib/charcnv.c
@@ -1297,11 +1297,11 @@ size_t pull_ucs2(const void *base_ptr, char *dest,
const void *src, size_t dest_
**/
size_t pull_ucs2_base_talloc(TALLOC_CTX *ctx,
- const void *base_ptr,
- char **ppdest,
- const void *src,
- size_t src_len,
- int flags)
+ const void *base_ptr,
+ char **ppdest,
+ const void *src,
+ size_t src_len,
+ int flags)
{
char *dest;
size_t dest_len;
@@ -1476,24 +1476,9 @@ bool pull_ascii_talloc(TALLOC_CTX *ctx, char **dest,
const char *src,
is -1 then no maxiumum is used.
**/
-size_t push_string_check_fn(const char *function, unsigned int line,
- void *dest, const char *src,
- size_t dest_len, int flags)
+size_t push_string_check_fn(void *dest, const char *src,
+ size_t dest_len, int flags)
{
-#ifdef DEVELOPER
- /* We really need to zero fill here, not clobber
- * region, as we want to ensure that valgrind thinks
- * all of the outgoing buffer has been written to
- * so a send() or write() won't trap an error.
- * JRA.
- */
-#if 0
- clobber_region(function, line, dest, dest_len);
-#else
- memset(dest, '\0', dest_len);
-#endif
-#endif
-
if (!(flags & STR_ASCII) && (flags & STR_UNICODE)) {
return push_ucs2(NULL, dest, src, dest_len, flags);
}
@@ -1515,24 +1500,10 @@ size_t push_string_check_fn(const char *function,
unsigned int line,
is -1 then no maxiumum is used.
**/
-size_t push_string_base(const char *function, unsigned int line,
- const char *base, uint16 flags2,
+size_t push_string_base(const char *base, uint16 flags2,
void *dest, const char *src,
size_t dest_len, int flags)
{
-#ifdef DEVELOPER
- /* We really need to zero fill here, not clobber
- * region, as we want to ensure that valgrind thinks
- * all of the outgoing buffer has been written to
- * so a send() or write() won't trap an error.
- * JRA.
- */
-#if 0
- clobber_region(function, line, dest, dest_len);
-#else
- memset(dest, '\0', dest_len);
-#endif
-#endif
if (!(flags & STR_ASCII) && \
((flags & STR_UNICODE || \
@@ -1559,15 +1530,6 @@ size_t push_string_base(const char *function, unsigned
int line,
ssize_t push_string(void *dest, const char *src, size_t dest_len, int flags)
{
size_t ret;
-#ifdef DEVELOPER
- /* We really need to zero fill here, not clobber
- * region, as we want to ensure that valgrind thinks
- * all of the outgoing buffer has been written to
- * so a send() or write() won't trap an error.
- * JRA.
- */
- memset(dest, '\0', dest_len);
-#endif
if (!(flags & STR_ASCII) && \
(flags & STR_UNICODE)) {
@@ -1595,20 +1557,14 @@ ssize_t push_string(void *dest, const char *src, size_t
dest_len, int flags)
The resulting string in "dest" is always null terminated.
**/
-size_t pull_string_fn(const char *function,
- unsigned int line,
- const void *base_ptr,
- uint16 smb_flags2,
- char *dest,
- const void *src,
- size_t dest_len,
- size_t src_len,
- int flags)
+size_t pull_string_fn(const void *base_ptr,
+ uint16 smb_flags2,
+ char *dest,
+ const void *src,
+ size_t dest_len,
+ size_t src_len,
+ int flags)
{
-#ifdef DEVELOPER
- clobber_region(function, line, dest, dest_len);
-#endif
-
if ((base_ptr == NULL) && ((flags & (STR_ASCII|STR_UNICODE)) == 0)) {
smb_panic("No base ptr to get flg2 and neither ASCII nor "
"UNICODE defined");
@@ -1637,15 +1593,13 @@ size_t pull_string_fn(const char *function,
The resulting string in "dest" is always null terminated.
**/
-size_t pull_string_talloc_fn(const char *function,
- unsigned int line,
- TALLOC_CTX *ctx,
- const void *base_ptr,
- uint16 smb_flags2,
- char **ppdest,
- const void *src,
- size_t src_len,
- int flags)
+size_t pull_string_talloc(TALLOC_CTX *ctx,
+ const void *base_ptr,
+ uint16 smb_flags2,
+ char **ppdest,
+ const void *src,
+ size_t src_len,
+ int flags)
{
if ((base_ptr == NULL) && ((flags & (STR_ASCII|STR_UNICODE)) == 0)) {
smb_panic("No base ptr to get flg2 and neither ASCII nor "
diff --git a/source3/lib/clobber.c b/source3/lib/clobber.c
deleted file mode 100644
index e77e786..0000000
--- a/source3/lib/clobber.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- Unix SMB/CIFS implementation.
- Samba utility functions
- Copyright (C) Martin Pool 2003
- Copyright (C) Andrew Bartlett 2003
-
- 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
--
Samba Shared Repository