From fc74862f115b08a33c4cbbcb38636dc705fa720b Mon Sep 17 00:00:00 2001 From: Sukru Senli Date: Wed, 8 Jun 2016 14:27:35 +0200 Subject: [PATCH] samba3: add mising files --- samba3/Config.in | 23 + samba3/files/config-lfs.h | 56 + samba3/files/samba-nmbd.init | 12 + samba3/files/samba-smbd.init | 81 + samba3/files/samba.config | 7 + samba3/files/samba.init | 168 ++ samba3/files/smb.conf.template | 19 + samba3/patches/100-avm.patch | 1719 +++++++++++++++++ samba3/patches/110-compile_fixes.patch | 48 + samba3/patches/120-owrt_paths.patch | 39 + samba3/patches/130-owrt_smbpasswd.patch | 216 +++ samba3/patches/150-fix_ls.patch | 15 + samba3/patches/160-fix_log.patch | 13 + samba3/patches/170-no_rpc.patch | 23 + ...0-fix_configure_for_crosscompilation.patch | 28 + samba3/patches/200-fix-configure.patch | 12 + samba3/patches/500-remove_avm_smaller.patch | 76 + samba3/patches/510-remove-printing.patch | 47 + 18 files changed, 2602 insertions(+) create mode 100644 samba3/Config.in create mode 100644 samba3/files/config-lfs.h create mode 100644 samba3/files/samba-nmbd.init create mode 100644 samba3/files/samba-smbd.init create mode 100644 samba3/files/samba.config create mode 100755 samba3/files/samba.init create mode 100644 samba3/files/smb.conf.template create mode 100644 samba3/patches/100-avm.patch create mode 100644 samba3/patches/110-compile_fixes.patch create mode 100644 samba3/patches/120-owrt_paths.patch create mode 100644 samba3/patches/130-owrt_smbpasswd.patch create mode 100644 samba3/patches/150-fix_ls.patch create mode 100644 samba3/patches/160-fix_log.patch create mode 100644 samba3/patches/170-no_rpc.patch create mode 100644 samba3/patches/190-fix_configure_for_crosscompilation.patch create mode 100644 samba3/patches/200-fix-configure.patch create mode 100644 samba3/patches/500-remove_avm_smaller.patch create mode 100644 samba3/patches/510-remove-printing.patch diff --git a/samba3/Config.in b/samba3/Config.in new file mode 100644 index 000000000..e3c02a3b0 --- /dev/null +++ b/samba3/Config.in @@ -0,0 +1,23 @@ +config SAMBA3_CONFIG_DEBUG + bool "Enable Logging for samba3" + depends on PACKAGE_samba3 + default n + help + Enables debugging support (will make binaries *much* bigger) + Also increases MAX_DEBUG_LEVEL to get more messages (also increases binary sizes!) + +config SAMBA3_CONFIG_SMALLER + bool "Make samba3 even smaller" + depends on PACKAGE_samba3 + default y + help + Removes support for ??? + Saves about 18kB for smbd, about 16kB for nmbd and about 17kB for smbpasswd + +config SAMBA3_CONFIG_NO_PRINTING + bool "Remove shared printing support" + depends on PACKAGE_samba3 + default y + help + Removes shared printing support. + Saves about 18kB for smbd, about 15kB for nmbd and about 18kB for smbpasswd diff --git a/samba3/files/config-lfs.h b/samba3/files/config-lfs.h new file mode 100644 index 000000000..128e8a526 --- /dev/null +++ b/samba3/files/config-lfs.h @@ -0,0 +1,56 @@ +#undef HAVE_CREAT64 +#define HAVE_CREAT64 1 + +#undef HAVE_FSEEKO64 +#define HAVE_FSEEKO64 1 + +#undef HAVE_FSTAT64 +#define HAVE_FSTAT64 1 + +#undef HAVE_FTELLO64 +#define HAVE_FTELLO64 1 + +#undef HAVE_FTRUNCATE64 +#define HAVE_FTRUNCATE64 1 + +#undef HAVE_LSEEK64 +#define HAVE_LSEEK64 1 + +#undef HAVE_LSTAT64 +#define HAVE_LSTAT64 1 + +#undef HAVE_OPEN64 +#define HAVE_OPEN64 1 + +#undef HAVE_PREAD64 +#define HAVE_PREAD64 1 + +#undef HAVE_PWRITE64 +#define HAVE_PWRITE64 1 + +#undef HAVE_READDIR64 +#define HAVE_READDIR64 1 + +#undef HAVE_STAT64 +#define HAVE_STAT64 1 + +#undef HAVE_STRUCT_FLOCK64 +#define HAVE_STRUCT_FLOCK64 1 + +#undef SIZEOF_LONG_LONG +#define SIZEOF_LONG_LONG 8 + +#undef SIZEOF_OFF_T +#define SIZEOF_OFF_T 8 + +#undef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 + +#undef _GNU_SOURCE +#define _GNU_SOURCE 1 + +#undef _LARGEFILE_SOURCE +#define _LARGEFILE_SOURCE 1 + +#undef _LARGEFILE64_SOURCE +#define _LARGEFILE64_SOURCE 1 diff --git a/samba3/files/samba-nmbd.init b/samba3/files/samba-nmbd.init new file mode 100644 index 000000000..8c9df2024 --- /dev/null +++ b/samba3/files/samba-nmbd.init @@ -0,0 +1,12 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2011 OpenWrt.org + +START=61 + +start() { + service_start /bin/nmbd -D +} + +stop() { + service_stop /bin/nmbd +} diff --git a/samba3/files/samba-smbd.init b/samba3/files/samba-smbd.init new file mode 100644 index 000000000..c89102c99 --- /dev/null +++ b/samba3/files/samba-smbd.init @@ -0,0 +1,81 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2008-2011 OpenWrt.org + +START=60 + +smb_header() { + local name + local workgroup + local description + local homes + local interface + + config_get name $1 name + config_get workgroup $1 workgroup + config_get description $1 description + config_get homes $1 homes + config_get interface $1 interface "lan" + + # resolve interfaces + local interfaces=$( + include /lib/network + scan_interfaces + local net ifname; for net in $interface; do + config_get ifname "$net" ifname "$net" + echo -n "$ifname " + done + ) + + [ -z "$name" ] && name=openwrt + [ -z "$workgroup" ] && workgroup=openwrt + [ -z "$description" ] && description=openwrt + + mkdir -p /var/etc + cp /etc/samba/smb.conf.template /var/etc/smb.conf + [ -L /etc/samba/smb.conf ] || ln -nsf /var/etc/smb.conf /etc/samba/smb.conf + sed -i "s/|NAME|/$name/g" /var/etc/smb.conf + sed -i "s/|WORKGROUP|/$workgroup/g" /var/etc/smb.conf + sed -i "s/|DESCRIPTION|/$description/g" /var/etc/smb.conf + sed -i "s/|INTERFACES|/$interfaces/g" /var/etc/smb.conf + [ "$homes" == "1" ] && { + echo -e "\n[homes]\n\tcomment = Home Directories\n\tbrowseable = no\n\tread only = no\n\tcreate mode = 0750" >> /var/etc/smb.conf + } +} + +smb_add_share() { + local name + local path + local users + local read_only + local guest_ok + local create_mask + local dir_mask + + config_get name $1 name + config_get path $1 path + config_get users $1 users + config_get read_only $1 read_only + config_get guest_ok $1 guest_ok + config_get create_mask $1 create_mask + config_get dir_mask $1 dir_mask + + [ -z "$name" -o -z "$path" ] && return + + echo -e "\n[$name]\n\tpath = $path" >> /var/etc/smb.conf + [ -n "$users" ] && echo -e "\tvalid users = $users" >> /var/etc/smb.conf + [ -n "$read_only" ] && echo -e "\tread only = $read_only" >> /var/etc/smb.conf + [ -n "$guest_ok" ] && echo -e "\tguest ok = $guest_ok" >> /var/etc/smb.conf + [ -n "$create_mask" ] && echo -e "\tcreate mask = $create_mask" >> /var/etc/smb.conf + [ -n "$dir_mask" ] && echo -e "\tdirectory mask = $dir_mask" >> /var/etc/smb.conf +} + +start() { + config_load samba + config_foreach smb_header samba + config_foreach smb_add_share sambashare + service_start /bin/smbd -D +} + +stop() { + service_stop /bin/smbd +} diff --git a/samba3/files/samba.config b/samba3/files/samba.config new file mode 100644 index 000000000..db064d587 --- /dev/null +++ b/samba3/files/samba.config @@ -0,0 +1,7 @@ +config samba + option 'name' 'IntenoSMB' + option 'workgroup' 'IntenoSMB' + option 'description' 'IntenoSMB' + option 'homes' '0' + option 'interface' 'lan' + diff --git a/samba3/files/samba.init b/samba3/files/samba.init new file mode 100755 index 000000000..d893d6dda --- /dev/null +++ b/samba3/files/samba.init @@ -0,0 +1,168 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2008-2012 OpenWrt.org + +START=60 +STOP=40 +USE_PROCD=1 + +useradd() +{ + local user + local password + config_get user $1 user + config_get password $1 password + if ! $(grep -rq "^$user:" /etc/passwd) ; then + echo "adding user $user" + adduser $user -s /bin/false -D -H -h /mnt/$user -g "samba,pass=$password" && smbpasswd $user $password + else + tmp=$(grep -r "^$user:" /etc/passwd | cut -d":" -f5) + if $(echo $tmp | grep -rq "^samba") ; then + if [ "$tmp" != "samba,pass=$password" ] ; then + echo "change user $user" + deluser $user + adduser $user -s /bin/false -D -H -h /mnt/$user -g "samba,pass=$password" && smbpasswd $user $password + fi + else + echo "activating samba for system user $user" + smbpasswd $user $password + fi + fi +} + +samba_user_exists() +{ + local user + config_get user $1 user + [ "$user" == "$2" ] && echo "1" && break +} + +purgepasswd() +{ + for us in `grep -r "^.*:" /etc/samba/smbpasswd | cut -d":" -f1`; do + if [ -z "$(config_foreach samba_user_exists sambausers $us)" ] ; then + smbpasswd -del $us + grep -r "^$us:" /etc/passwd | cut -d":" -f5 | grep -rq "^samba" && deluser $us + fi + done + + # delete left over samba users in case they were not in /etc/samba/smbpasswd + for us in `grep ":/mnt/" /etc/passwd | cut -d":" -f1`; do + deluser $us + done +} + +smb_header() { + local interface + config_get interface $1 interface + + # resolve interfaces + local interfaces=$( + . /lib/functions/network.sh + + local net + for net in $interface; do + local device + network_get_device device "$net" && { + local subnet + network_get_subnet subnet "$net" && echo -n "$subnet " + network_get_subnet6 subnet "$net" && echo -n "$subnet " + } + + echo -n "${device:-$net} " + done + ) + + local name workgroup description charset + local hostname="$(uci_get system.@system[0].hostname)" + + config_get name $1 name "${hostname:-OpenWrt}" + config_get workgroup $1 workgroup "${hostname:-OpenWrt}" + config_get description $1 description "Samba on ${hostname:-OpenWrt}" + config_get charset $1 charset "UTF-8" + + mkdir -p /var/etc + sed -e "s#|NAME|#$name#g" \ + -e "s#|WORKGROUP|#$workgroup#g" \ + -e "s#|DESCRIPTION|#$description#g" \ + -e "s#|INTERFACES|#$interfaces#g" \ + -e "s#|CHARSET|#$charset#g" \ + /etc/samba/smb.conf.template > /var/etc/smb.conf + + local homes + config_get_bool homes $1 homes 0 + [ $homes -gt 0 ] && { + cat <> /var/etc/smb.conf + +[homes] + comment = Home Directories + browsable = no + read only = no + create mode = 0750 +EOT + } + + [ -L /etc/samba/smb.conf ] || $(rm -f /etc/samba/smb.conf; ln -nsf /var/etc/smb.conf /etc/samba/smb.conf) +} + +smb_add_share() { + local name + local path + local users + local read_only + local guest_ok + local create_mask + local dir_mask + local browseable + local dirpath + + config_get name $1 name + config_get path $1 path + config_get users $1 users + config_get read_only $1 read_only + config_get guest_ok $1 guest_ok + config_get create_mask $1 create_mask + config_get dir_mask $1 dir_mask + config_get browseable $1 browseable + config_get dirpath $1 dirpath + path="$path/$dirpath" + + [ -z "$name" -o -z "$path" ] && return + + echo -e "\n[$name]\n\tpath = $path" >> /var/etc/smb.conf + [ -n "$users" ] && echo -e "\tvalid users = $users" >> /var/etc/smb.conf + [ -n "$read_only" ] && echo -e "\tread only = $read_only" >> /var/etc/smb.conf + [ -n "$guest_ok" ] && echo -e "\tguest ok = $guest_ok" >> /var/etc/smb.conf + [ -n "$create_mask" ] && echo -e "\tcreate mask = $create_mask" >> /var/etc/smb.conf + [ -n "$dir_mask" ] && echo -e "\tdirectory mask = $dir_mask" >> /var/etc/smb.conf + [ -n "$browseable" ] && echo -e "\tbrowseable = $browseable" >> /var/etc/smb.conf +} + +start_service() { + config_load samba + purgepasswd + config_foreach useradd sambausers + config_foreach smb_header samba + config_foreach smb_add_share sambashare + + procd_open_instance + procd_set_param command "/bin/smbd" -F + procd_close_instance + + procd_open_instance + procd_set_param command "/bin/nmbd" -F + procd_close_instance +} + +stop_service() { + service_stop /bin/smbd + service_stop /bin/nmbd +} + +reload_service() { + stop + start +} + +service_triggers() { + procd_add_reload_trigger samba network +} diff --git a/samba3/files/smb.conf.template b/samba3/files/smb.conf.template new file mode 100644 index 000000000..3024d775b --- /dev/null +++ b/samba3/files/smb.conf.template @@ -0,0 +1,19 @@ +[global] + netbios name = |NAME| + workgroup = |WORKGROUP| + server string = |DESCRIPTION| + syslog = 10 + encrypt passwords = true + passdb backend = smbpasswd + obey pam restrictions = yes + socket options = TCP_NODELAY + unix charset = UTF-8 + preferred master = yes + os level = 20 + security = user + guest account = nobody + invalid users = root + smb passwd file = /etc/samba/smbpasswd + interfaces = |INTERFACES| + bind interfaces only = yes + diff --git a/samba3/patches/100-avm.patch b/samba3/patches/100-avm.patch new file mode 100644 index 000000000..95e568182 --- /dev/null +++ b/samba3/patches/100-avm.patch @@ -0,0 +1,1719 @@ +Index: samba-3.0.37/source/auth/auth_util.c +=================================================================== +--- samba-3.0.37.orig/source/auth/auth_util.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/auth/auth_util.c 2011-08-09 00:02:34.854444169 +0200 +@@ -2284,18 +2284,20 @@ + /* The only other possible result is that winbind is not up + and running. We need to update the trustdom_cache + ourselves */ +- ++#ifndef AVM_SMALLER + update_trustdom_cache(); ++#endif + } + + /* now the trustdom cache should be available a DC could still + * have a transitive trust so fall back to the cache of trusted + * domains (like a domain member would use */ + ++#ifndef AVM_SMALLER + if ( trustdom_cache_fetch(dom_name, &trustdom_sid) ) { + return True; + } +- ++#endif + return False; + } + +Index: samba-3.0.37/source/include/local.h +=================================================================== +--- samba-3.0.37.orig/source/include/local.h 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/include/local.h 2011-08-09 00:02:34.854444169 +0200 +@@ -49,7 +49,8 @@ + #define MAX_DIRECTORY_HANDLES 2048 + + /* maximum number of file caches per smbd */ +-#define MAX_WRITE_CACHES 10 ++/* #define MAX_WRITE_CACHES 10 */ ++#define MAX_WRITE_CACHES 2 /* AVM */ + + /* define what facility to use for syslog */ + #ifndef SYSLOG_FACILITY +Index: samba-3.0.37/source/lib/iconv.c +=================================================================== +--- samba-3.0.37.orig/source/lib/iconv.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/lib/iconv.c 2011-08-09 00:02:34.854444169 +0200 +@@ -385,7 +385,10 @@ + + while (*inbytesleft >= 2 && *outbytesleft >= 1) { + (*outbuf)[0] = (*inbuf)[0]; +- if ((*inbuf)[1]) ir_count++; ++ if ((*inbuf)[1]) { ++ ir_count++; ++ (*outbuf)[0] = '_'; // AVM ++ } + (*inbytesleft) -= 2; + (*outbytesleft) -= 1; + (*inbuf) += 2; +Index: samba-3.0.37/source/lib/pidfile.c +=================================================================== +--- samba-3.0.37.orig/source/lib/pidfile.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/lib/pidfile.c 2011-08-09 00:02:34.854444169 +0200 +@@ -87,6 +87,7 @@ + pstring pidFile; + pid_t pid; + ++#if 0 /* AVM */ + /* Add a suffix to the program name if this is a process with a + * none default configuration file name. */ + if (strcmp( CONFIGFILE, dyn_CONFIGFILE) == 0) { +@@ -103,6 +104,9 @@ + slprintf( name, sizeof( name)-1, "%s-%s", program_name, + short_configfile ); + } ++#else ++ strncpy( name, program_name, sizeof( name)-1); ++#endif + + slprintf(pidFile, sizeof(pidFile)-1, "%s/%s.pid", lp_piddir(), name); + +Index: samba-3.0.37/source/lib/system.c +=================================================================== +--- samba-3.0.37.orig/source/lib/system.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/lib/system.c 2011-08-09 00:02:34.864444169 +0200 +@@ -1499,7 +1499,11 @@ + void *sys_dlopen(const char *name, int flags) + { + #if defined(HAVE_DLOPEN) ++#if 1 /* FRITZBOX */ ++ return NULL; ++#else + return dlopen(name, flags); ++#endif + #else + return NULL; + #endif +Index: samba-3.0.37/source/lib/util.c +=================================================================== +--- samba-3.0.37.orig/source/lib/util.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/lib/util.c 2011-08-09 00:02:34.864444169 +0200 +@@ -301,7 +301,11 @@ + char *p; + if ((p = getenv("TMPDIR"))) + return p; ++#if 0 /* AVM */ ++ return "/var/tmp"; ++#else + return "/tmp"; ++#endif + } + + /**************************************************************************** +Index: samba-3.0.37/source/libsmb/clifile.c +=================================================================== +--- samba-3.0.37.orig/source/libsmb/clifile.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/libsmb/clifile.c 2011-08-09 00:02:34.864444169 +0200 +@@ -21,6 +21,8 @@ + + #include "includes.h" + ++#ifndef AVM_SMALLER ++ + /**************************************************************************** + Hard/Symlink a file (UNIX extensions). + Creates new name (sym)linked to oldname. +@@ -71,6 +73,9 @@ + return True; + } + ++#endif /* AVM_SMALLER */ ++ ++ + /**************************************************************************** + Map standard UNIX permissions onto wire representations. + ****************************************************************************/ +@@ -165,6 +170,9 @@ + } + } + ++ ++#ifndef AVM_SMALLER ++ + /**************************************************************************** + Do a POSIX getfacl (UNIX extensions). + ****************************************************************************/ +@@ -647,6 +655,7 @@ + + return True; + } ++#endif /* AVM_SMALLER */ + + /**************************************************************************** + Open a file - exposing the full horror of the NT API :-). +@@ -718,6 +727,7 @@ + FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0); + } + ++#ifndef AVM_SMALLER + /**************************************************************************** + Open a file + WARNING: if you open with O_WRONLY then getattrE won't work! +@@ -796,6 +806,7 @@ + + return SVAL(cli->inbuf,smb_vwv2); + } ++#endif /* AVM_SMALLER */ + + /**************************************************************************** + Close a file. +@@ -823,6 +834,7 @@ + return !cli_is_error(cli); + } + ++#ifndef AVM_SMALLER + + /**************************************************************************** + send a lock with a specified locktype +@@ -1972,3 +1984,6 @@ + { + return cli_posix_unlink_internal(cli, fname, True); + } ++ ++#endif /* AVM_SMALLER */ ++ +Index: samba-3.0.37/source/libsmb/namequery.c +=================================================================== +--- samba-3.0.37.orig/source/libsmb/namequery.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/libsmb/namequery.c 2011-08-09 00:02:34.864444169 +0200 +@@ -1114,6 +1114,7 @@ + const char *sitename, + struct ip_service **return_iplist, int *return_count) + { ++#ifdef HAVE_ADS + int i, j; + NTSTATUS status; + TALLOC_CTX *ctx; +@@ -1194,6 +1195,9 @@ + + talloc_destroy(ctx); + return True; ++#else /* HAVE_ADS */ ++ return False; ++#endif + } + + /******************************************************************* +Index: samba-3.0.37/source/libsmb/namequery_dc.c +=================================================================== +--- samba-3.0.37.orig/source/libsmb/namequery_dc.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/libsmb/namequery_dc.c 2011-08-09 00:02:34.864444169 +0200 +@@ -52,6 +52,9 @@ + struct in_addr *dc_ip, + fstring srv_name) + { ++#if 1 /* AVM */ ++ return False; ++#else + ADS_STRUCT *ads; + char *sitename; + int i; +@@ -139,6 +142,7 @@ + srv_name, inet_ntoa(*dc_ip))); + + return True; ++#endif /* AVM */ + } + + /**************************************************************************** +Index: samba-3.0.37/source/modules/vfs_default.c +=================================================================== +--- samba-3.0.37.orig/source/modules/vfs_default.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/modules/vfs_default.c 2011-08-09 14:13:37.593167315 +0200 +@@ -24,6 +24,78 @@ + #undef DBGC_CLASS + #define DBGC_CLASS DBGC_VFS + ++// AVM_SEC - avoid following NTFS symbolic links to "not allowed places" ++// #define AVM_SEC ++ ++ ++#ifdef AVM_SEC ++static int IsAllowed(const char *pa) ++{ ++ // only allow access below /var/media/ftp/ ++ ++ if (!pa) return 0; ++ ++Log(("IsAllowed: checking %s", pa)); ++ ++ char *path = strdup(pa); ++ if (!path) goto no; ++ ++ char buf[4096]; ++ int ret; ++ char *p = &path[strlen(path)]; ++ char c = *p; ++ do { ++ if (path[0] == '\0') { ++ if (0 == getcwd(buf, sizeof(buf))) { ++ *p = c; ++ goto no; // failed - not allowed ++ } ++ ret = 0; ++ } else { ++ if (0 == realpath(path, buf)) ret = -1; ++ else ret = 0; ++ } ++ if (ret) { ++ // realpath failed - remove prev path component ++ *p = c; ++ while(p > path && *(p-1) != '/') p--; ++ if (p <= path) { ++ p = path; ++ } else { ++ p--; ++ } ++ c = *p; ++ *p = '\0'; ++ } ++ } while(ret); ++ ++ *p = c; ++ ++#if 0 // TODO ++ // weitere pfadkompontenen // /./ und /../ auswerten ++ // assert (*p ist '\0' oder '/') ++ while(*p != '\0') { ++ xxx ++ } ++#endif ++ ++ if (buf != strstr(buf, "/var/media/ftp")) goto no; ++ c = buf[strlen("/var/media/ftp")]; ++ if (c != '/' && c != '\0') goto no; ++ ++Log(("IsAllowed: %s ok", pa)); ++ if (path) free(path); ++ return 1; ++ ++no: ++ Log(("IsAllowed: %s not allowed", pa ? pa : "(null)")); ++ if (path) free(path); ++ return 0; ++} ++#endif ++ ++ ++ + /* Check for NULL pointer parameters in vfswrap_* functions */ + + /* We don't want to have NULL function pointers lying around. Someone +@@ -88,6 +160,10 @@ + + static int vfswrap_statvfs(struct vfs_handle_struct *handle, const char *path, vfs_statvfs_struct *statbuf) + { ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + return sys_statvfs(path, statbuf); + } + +@@ -97,6 +173,10 @@ + { + SMB_STRUCT_DIR *result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(fname)) { errno = EACCES; return 0; } ++#endif ++ + START_PROFILE(syscall_opendir); + result = sys_opendir(fname); + END_PROFILE(syscall_opendir); +@@ -141,6 +221,10 @@ + int result; + BOOL has_dacl = False; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_mkdir); + + if (lp_inherit_acls(SNUM(handle->conn)) && (has_dacl = directory_has_default_acl(handle->conn, parent_dirname(path)))) +@@ -169,6 +253,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_rmdir); + result = rmdir(path); + END_PROFILE(syscall_rmdir); +@@ -192,6 +280,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(fname)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_open); + result = sys_open(fname, flags, mode); + END_PROFILE(syscall_open); +@@ -361,6 +453,11 @@ + int ifd = -1; + int ofd = -1; + ++#ifdef AVM_SEC ++ if (!IsAllowed(source)) { errno = EACCES; return -1; } ++ if (!IsAllowed(dest)) { errno = EACCES; return -1; } ++#endif ++ + if (sys_lstat (source, &source_stats) == -1) + return -1; + +@@ -442,6 +539,11 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(oldname)) { errno = EACCES; return -1; } ++ if (!IsAllowed(newname)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_rename); + result = rename(oldname, newname); + if ((result == -1) && (errno == EXDEV)) { +@@ -471,6 +573,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(fname)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_stat); + result = sys_stat(fname, sbuf); + END_PROFILE(syscall_stat); +@@ -491,6 +597,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_lstat); + result = sys_lstat(path, sbuf); + END_PROFILE(syscall_lstat); +@@ -501,6 +611,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_unlink); + result = unlink(path); + END_PROFILE(syscall_unlink); +@@ -511,6 +625,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_chmod); + + /* +@@ -572,6 +690,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_chown); + result = sys_chown(path, uid, gid); + END_PROFILE(syscall_chown); +@@ -597,6 +719,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_chdir); + result = chdir(path); + END_PROFILE(syscall_chdir); +@@ -717,6 +843,44 @@ + return result; + } + ++#if 1 // AVM patch - don't growth the file (too much time and RAM for copy of large files to USB1.1 FAT filesystem) ++ { ++ SMB_BIG_UINT big_len = len; ++ ++ result = SMB_VFS_FSTAT(fsp,fsp->fh->fd,&st); ++ if (result == -1) { ++ goto done; ++ } ++ ++ if (big_len == (SMB_BIG_UINT)st.st_size) { ++ result = 0; ++ goto done; ++ } ++ ++ if (big_len > (SMB_BIG_UINT)st.st_size) { ++ SMB_BIG_UINT space_avail; ++ SMB_BIG_UINT bsize,dfree,dsize; ++ big_len -= st.st_size; ++ big_len /= 1024; /* Len is now number of 1k blocks needed. */ ++ space_avail = SMB_VFS_DISK_FREE(fsp->conn ,fsp->fsp_name,False,&bsize,&dfree,&dsize); ++ if (space_avail == (SMB_BIG_UINT)-1) { ++ result = -1; ++ goto done; ++ } ++ ++ if (big_len > space_avail) { ++ errno = ENOSPC; ++ result = -1; ++ goto done; ++ } ++ ++ // do nothing to be fast! ++ result = 0; ++ goto done; ++ } ++ } // block ++#endif // AVM Patch ++ + /* we used to just check HAVE_FTRUNCATE_EXTEND and only use + sys_ftruncate if the system supports it. Then I discovered that + you can have some filesystems that support ftruncate +@@ -830,6 +994,11 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(oldpath)) { errno = EACCES; return -1; } ++ if (!IsAllowed(newpath)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_symlink); + result = sys_symlink(oldpath, newpath); + END_PROFILE(syscall_symlink); +@@ -840,6 +1009,10 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_readlink); + result = sys_readlink(path, buf, bufsiz); + END_PROFILE(syscall_readlink); +@@ -850,6 +1023,11 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(oldpath)) { errno = EACCES; return -1; } ++ if (!IsAllowed(newpath)) { errno = EACCES; return -1; } ++#endif ++ + START_PROFILE(syscall_link); + result = sys_link(oldpath, newpath); + END_PROFILE(syscall_link); +@@ -860,6 +1038,9 @@ + { + int result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(pathname)) { errno = EACCES; return -1; } ++#endif + START_PROFILE(syscall_mknod); + result = sys_mknod(pathname, mode, dev); + END_PROFILE(syscall_mknod); +@@ -870,6 +1051,9 @@ + { + char *result; + ++#ifdef AVM_SEC ++ if (!IsAllowed(path)) { errno = EACCES; return 0; } ++#endif + START_PROFILE(syscall_realpath); + result = sys_realpath(path, resolved_path); + END_PROFILE(syscall_realpath); +Index: samba-3.0.37/source/param/loadparm.c +=================================================================== +--- samba-3.0.37.orig/source/param/loadparm.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/param/loadparm.c 2011-08-09 00:02:34.874444169 +0200 +@@ -2713,8 +2713,11 @@ + + slprintf(comment, sizeof(comment) - 1, + "IPC Service (%s)", Globals.szServerString); +- ++#if 0 /* AVM */ ++ string_set(&ServicePtrs[i]->szPath, "/var/media/ftp"); ++#else + string_set(&ServicePtrs[i]->szPath, tmpdir()); ++#endif + string_set(&ServicePtrs[i]->szUsername, ""); + string_set(&ServicePtrs[i]->comment, comment); + string_set(&ServicePtrs[i]->fstype, "IPC"); +Index: samba-3.0.37/source/registry/reg_frontend.c +=================================================================== +--- samba-3.0.37.orig/source/registry/reg_frontend.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/registry/reg_frontend.c 2011-08-09 00:02:34.874444169 +0200 +@@ -35,9 +35,11 @@ + + REGISTRY_HOOK reg_hooks[] = { + #ifndef REG_TDB_ONLY ++#ifndef AVM_NO_PRINTING + { KEY_PRINTING, &printing_ops }, + { KEY_PRINTING_2K, &printing_ops }, + { KEY_PRINTING_PORTS, &printing_ops }, ++#endif + { KEY_SHARES, &shares_reg_ops }, + #endif + { NULL, NULL } +Index: samba-3.0.37/source/rpc_client/cli_pipe.c +=================================================================== +--- samba-3.0.37.orig/source/rpc_client/cli_pipe.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/rpc_client/cli_pipe.c 2011-08-09 00:02:34.874444169 +0200 +@@ -619,7 +619,11 @@ + + DEBUG(1, ("cli_pipe_validate_current_pdu: RPC fault code %s received from remote machine %s " + "pipe %s fnum 0x%x!\n", ++#if 1 /* AVM */ ++ "ERRSTR-REPLACEMENT", ++#else + dcerpc_errstr(NT_STATUS_V(fault_resp.status)), ++#endif + cli->cli->desthost, + cli->pipe_name, + (unsigned int)cli->fnum)); +Index: samba-3.0.37/source/rpc_parse/parse_prs.c +=================================================================== +--- samba-3.0.37.orig/source/rpc_parse/parse_prs.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/rpc_parse/parse_prs.c 2011-08-09 00:02:34.874444169 +0200 +@@ -796,7 +796,12 @@ + } + + DEBUG(5,("%s%04x %s: %s\n", tab_depth(depth), ps->data_offset, name, +- dcerpc_errstr(NT_STATUS_V(*status)))); ++#if 1 /* AVM */ ++ "ERRSTR-REPLACEMENT" ++#else ++ dcerpc_errstr(NT_STATUS_V(*status)) ++#endif ++ )); + + ps->data_offset += sizeof(uint32); + +Index: samba-3.0.37/source/rpc_parse/parse_sec.c +=================================================================== +--- samba-3.0.37.orig/source/rpc_parse/parse_sec.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/rpc_parse/parse_sec.c 2011-08-09 00:02:34.874444169 +0200 +@@ -104,7 +104,7 @@ + for you as it reads them. + ********************************************************************/ + +-BOOL sec_io_acl(const char *desc, SEC_ACL **ppsa, prs_struct *ps, int depth) ++static BOOL sec_io_acl(const char *desc, SEC_ACL **ppsa, prs_struct *ps, int depth) + { + unsigned int i; + uint32 old_offset; +Index: samba-3.0.37/source/rpc_parse/parse_spoolss.c +=================================================================== +--- samba-3.0.37.orig/source/rpc_parse/parse_spoolss.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/rpc_parse/parse_spoolss.c 2011-08-09 00:02:34.874444169 +0200 +@@ -227,8 +227,13 @@ + if(!prs_uint32("count2", ps, depth, &type->count2)) + return False; + +- if (type->count2 != type->count) ++ if (type->count2 != type->count) { + DEBUG(4,("What a mess, count was %x now is %x !\n", type->count, type->count2)); ++ return False; ++ } ++ if (type->count2 > MAX_NOTIFY_TYPE_FOR_NOW) { ++ return False; ++ } + + if (type->count2 > MAX_NOTIFY_TYPE_FOR_NOW) { + return False; +Index: samba-3.0.37/source/rpc_server/srv_pipe.c +=================================================================== +--- samba-3.0.37.orig/source/rpc_server/srv_pipe.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/rpc_server/srv_pipe.c 2011-08-09 00:02:34.884444169 +0200 +@@ -2335,6 +2335,7 @@ + int n_cmds = 0; + + switch ( idx ) { ++#ifndef AVM_SMALLER + case PI_LSARPC: + lsa_get_pipe_fns( &cmds, &n_cmds ); + break; +@@ -2347,12 +2348,14 @@ + case PI_NETLOGON: + netlog_get_pipe_fns( &cmds, &n_cmds ); + break; ++#endif /* AVM_SMALLER */ + case PI_SRVSVC: + srvsvc_get_pipe_fns( &cmds, &n_cmds ); + break; + case PI_WKSSVC: + wkssvc_get_pipe_fns( &cmds, &n_cmds ); + break; ++#ifndef AVM_SMALLER + case PI_WINREG: + reg_get_pipe_fns( &cmds, &n_cmds ); + break; +@@ -2371,6 +2374,8 @@ + case PI_NTSVCS: + ntsvcs_get_pipe_fns( &cmds, &n_cmds ); + break; ++#endif /* AVM_SMALLER */ ++ + #ifdef DEVELOPER + case PI_ECHO: + echo_get_pipe_fns( &cmds, &n_cmds ); +Index: samba-3.0.37/source/smbd/change_trust_pw.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/change_trust_pw.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/change_trust_pw.c 2011-08-09 00:02:34.884444169 +0200 +@@ -30,6 +30,10 @@ + + NTSTATUS change_trust_account_password( const char *domain, const char *remote_machine) + { ++#ifdef AVM_SMALLER ++ return NT_STATUS_UNSUCCESSFUL; ++#else ++ + NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; + struct in_addr pdc_ip; + fstring dc_name; +@@ -97,4 +101,5 @@ + DEBUG(5,("change_trust_account_password: sucess!\n")); + + return nt_status; ++#endif /* AVM_SMALLER */ + } +Index: samba-3.0.37/source/smbd/close.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/close.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/close.c 2011-08-09 00:02:34.884444169 +0200 +@@ -353,7 +353,9 @@ + saved_status2 = close_filestruct(fsp); + + if (fsp->print_file) { ++#ifndef AVM_NO_PRINTING + print_fsp_end(fsp, close_type); ++#endif + file_free(fsp); + return NT_STATUS_OK; + } +Index: samba-3.0.37/source/smbd/conn.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/conn.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/conn.c 2011-08-09 00:02:34.884444169 +0200 +@@ -216,9 +216,12 @@ + * idle with a handle open. + */ + ++ ++#ifndef AVM_SMALLER + for (plist = get_first_internal_pipe(); plist; plist = get_next_internal_pipe(plist)) + if (plist->pipe_handles && plist->pipe_handles->count) + allidle = False; ++#endif + + return allidle; + } +Index: samba-3.0.37/source/smbd/dfree.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/dfree.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/dfree.c 2011-08-09 00:02:34.884444169 +0200 +@@ -130,11 +130,13 @@ + } + } + ++#if 0 /* AVM */ + if (disk_quotas(path, &bsize_q, &dfree_q, &dsize_q)) { + (*bsize) = bsize_q; + (*dfree) = MIN(*dfree,dfree_q); + (*dsize) = MIN(*dsize,dsize_q); + } ++#endif + + /* FIXME : Any reason for this assumption ? */ + if (*bsize < 256) { +Index: samba-3.0.37/source/smbd/dosmode.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/dosmode.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/dosmode.c 2011-08-09 00:02:34.884444169 +0200 +@@ -40,12 +40,15 @@ + if (ISDOT(path) || ISDOTDOT(path)) { + return 0; + } +- ++#ifdef AVM_SMALLER ++ return 0; ++#else + if (!lp_dmapi_support(SNUM(conn)) || !dmapi_have_session()) { + return 0; + } + + return dmapi_file_flags(path); ++#endif + } + + /**************************************************************************** +Index: samba-3.0.37/source/smbd/fileio.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/fileio.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/fileio.c 2011-08-09 00:02:34.884444169 +0200 +@@ -176,6 +176,8 @@ + + static int wcp_file_size_change(files_struct *fsp) + { ++/* AVM: Fuer Pruefung des freien Speichers auf dem Datentraeger wird ++ SMB_VFS_FTRUNCATE aufgerufen, auch falls es langsam sein sollte */ + int ret; + write_cache *wcp = fsp->wcp; + +@@ -199,6 +201,10 @@ + int write_path = -1; + + if (fsp->print_file) { ++#ifdef AVM_NO_PRINTING ++ errno = EBADF; ++ return -1; ++#else + fstring sharename; + uint32 jobid; + +@@ -210,6 +216,7 @@ + } + + return print_job_write(SNUM(fsp->conn), jobid, data, pos, n); ++#endif /* AVM_NO_PRINTING */ + } + + if (!fsp->can_write) { +Index: samba-3.0.37/source/smbd/files.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/files.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/files.c 2011-08-09 00:02:34.884444169 +0200 +@@ -203,10 +203,12 @@ + exit_server("out of memory in file_init"); + } + ++#ifndef AVM_SMALLER + /* + * Ensure that pipe_handle_oppset is set correctly. + */ + set_pipe_handle_offset(real_max_open_files); ++#endif + } + + /**************************************************************************** +Index: samba-3.0.37/source/smbd/lanman.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/lanman.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/lanman.c 2011-08-09 00:02:34.884444169 +0200 +@@ -400,6 +400,7 @@ + PACK(desc,t,v); + } + ++#ifndef AVM_NO_PRINTING + /**************************************************************************** + Get a print queue. + ****************************************************************************/ +@@ -781,6 +782,7 @@ + + return result; + } ++#endif /* AVM_NO_PRINTING */ + + static BOOL api_DosPrintQGetInfo(connection_struct *conn, uint16 vuid, + char *param, int tpscnt, +@@ -789,6 +791,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -901,6 +906,7 @@ + SAFE_FREE(tmpdata); + + return(True); ++#endif /* AVM_NO_PRINTING */ + } + + /**************************************************************************** +@@ -914,6 +920,9 @@ + char **rdata, char** rparam, + int *rdata_len, int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *param_format = get_safe_str_ptr(param,tpscnt,param,2); + char *output_format1 = skip_string(param,tpscnt,param_format); + char *p = skip_string(param,tpscnt,output_format1); +@@ -1046,6 +1055,7 @@ + SAFE_FREE(status); + + return False; ++#endif /* AVM_NO_PRINTING */ + } + + /**************************************************************************** +@@ -2539,6 +2549,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + int function = get_safe_SVAL(param,tpscnt,param,0,0); + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); +@@ -2609,6 +2622,7 @@ + SSVAL(*rparam,2,0); /* converter word */ + + return(True); ++#endif + } + + /**************************************************************************** +@@ -2622,6 +2636,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + int function = get_safe_SVAL(param,tpscnt,param,0,0); + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); +@@ -2674,6 +2691,7 @@ + SSVAL(*rparam,2,0); /* converter word */ + + return(True); ++#endif + } + + /**************************************************************************** +@@ -2714,6 +2732,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + struct pack_desc desc; + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); +@@ -2788,6 +2809,7 @@ + SSVAL(*rparam,2,0); /* converter word */ + + return(True); ++#endif + } + + +@@ -3579,6 +3601,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -3669,6 +3694,7 @@ + DEBUG(4,("WPrintJobGetInfo: errorcode %d\n",desc.errcode)); + + return True; ++#endif + } + + static BOOL api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid, +@@ -3678,6 +3704,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -3760,6 +3789,7 @@ + DEBUG(4,("WPrintJobEnumerate: errorcode %d\n",desc.errcode)); + + return True; ++#endif + } + + static int check_printdest_info(struct pack_desc* desc, +@@ -3835,6 +3865,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -3906,6 +3939,7 @@ + SAFE_FREE(tmpdata); + + return True; ++#endif + } + + static BOOL api_WPrintDestEnum(connection_struct *conn, uint16 vuid, +@@ -3915,6 +3949,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -3987,6 +4024,7 @@ + DEBUG(4,("WPrintDestEnumerate: errorcode %d\n",desc.errcode)); + + return True; ++#endif + } + + static BOOL api_WPrintDriverEnum(connection_struct *conn, uint16 vuid, +@@ -3996,6 +4034,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -4050,6 +4091,7 @@ + DEBUG(4,("WPrintDriverEnum: errorcode %d\n",desc.errcode)); + + return True; ++#endif + } + + static BOOL api_WPrintQProcEnum(connection_struct *conn, uint16 vuid, +@@ -4059,6 +4101,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -4113,6 +4158,7 @@ + DEBUG(4,("WPrintQProcEnum: errorcode %d\n",desc.errcode)); + + return True; ++#endif + } + + static BOOL api_WPrintPortEnum(connection_struct *conn, uint16 vuid, +@@ -4122,6 +4168,9 @@ + char **rdata,char **rparam, + int *rdata_len,int *rparam_len) + { ++#ifdef AVM_NO_PRINTING ++return False; ++#else + char *str1 = get_safe_str_ptr(param,tpscnt,param,2); + char *str2 = skip_string(param,tpscnt,str1); + char *p = skip_string(param,tpscnt,str2); +@@ -4178,6 +4227,7 @@ + DEBUG(4,("WPrintPortEnum: errorcode %d\n",desc.errcode)); + + return True; ++#endif + } + + /**************************************************************************** +Index: samba-3.0.37/source/smbd/open.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/open.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/open.c 2011-08-09 00:02:34.884444169 +0200 +@@ -1155,8 +1155,11 @@ + } + + DEBUG(10, ("open_file_ntcreate: printer open fname=%s\n", fname)); +- ++#ifdef AVM_NO_PRINTING ++ return NT_STATUS_OK; ++#else + return print_fsp_open(conn, fname, result); ++#endif + } + + if (!parent_dirname_talloc(tmp_talloc_ctx(), fname, &parent_dir, +Index: samba-3.0.37/source/smbd/process.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/process.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/process.c 2011-08-09 00:02:34.894444169 +0200 +@@ -1028,7 +1028,9 @@ + + chain_size = 0; + file_chain_reset(); ++#ifndef AVM_SMALLER + reset_chain_p(); ++#endif + + if (msg_type != 0) + return(reply_special(inbuf,outbuf)); +@@ -1268,9 +1270,11 @@ + + select_timeout = blocking_locks_timeout_ms(SMBD_SELECT_TIMEOUT*1000); + ++#ifndef AVM_NO_PRINTING + if (print_notify_messages_pending()) { + select_timeout = MIN(select_timeout, 1000); + } ++#endif + + return select_timeout; + } +@@ -1461,9 +1465,10 @@ + */ + process_blocking_lock_queue(); + ++#ifndef AVM_NO_PRINTING + /* update printer queue caches if necessary */ +- + update_monitored_printq_cache(); ++#endif + + /* + * Now we are root, check if the log files need pruning. +@@ -1472,9 +1477,10 @@ + force_check_log_size(); + check_log_size(); + ++#ifndef AVM_NO_PRINTING + /* Send any queued printer notify message to interested smbd's. */ +- + print_notify_send_messages(0); ++#endif + + /* + * Modify the select timeout depending upon +Index: samba-3.0.37/source/smbd/reply.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/reply.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/reply.c 2011-08-09 00:02:34.894444169 +0200 +@@ -3606,7 +3606,10 @@ + NTSTATUS status; + + START_PROFILE(SMBsplopen); +- ++#ifdef AVM_NO_PRINTING ++ END_PROFILE(SMBsplopen); ++ return ERROR_DOS(ERRDOS,ERRnoaccess); ++#else + if (!CAN_PRINT(conn)) { + END_PROFILE(SMBsplopen); + return ERROR_DOS(ERRDOS,ERRnoaccess); +@@ -3628,6 +3631,7 @@ + + END_PROFILE(SMBsplopen); + return(outsize); ++#endif + } + + /**************************************************************************** +@@ -3644,6 +3648,10 @@ + + CHECK_FSP(fsp,conn); + ++#ifdef AVM_NO_PRINTING ++ END_PROFILE(SMBsplretq); ++ return ERROR_DOS(ERRDOS,ERRnoaccess); ++#else + if (!CAN_PRINT(conn)) { + END_PROFILE(SMBsplclose); + return ERROR_NT(NT_STATUS_DOS(ERRSRV, ERRerror)); +@@ -3661,6 +3669,7 @@ + + END_PROFILE(SMBsplclose); + return(outsize); ++#endif + } + + /**************************************************************************** +@@ -3670,6 +3679,10 @@ + int reply_printqueue(connection_struct *conn, + char *inbuf,char *outbuf, int dum_size, int dum_buffsize) + { ++#ifdef AVM_NO_PRINTING ++ END_PROFILE(SMBsplretq); ++ return ERROR_DOS(ERRDOS,ERRnoaccess); ++#else + int outsize = set_message(outbuf,2,3,True); + int max_count = SVAL(inbuf,smb_vwv0); + int start_index = SVAL(inbuf,smb_vwv1); +@@ -3732,6 +3745,7 @@ + + END_PROFILE(SMBsplretq); + return(outsize); ++#endif + } + + /**************************************************************************** +Index: samba-3.0.37/source/smbd/server.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/server.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/server.c 2011-08-09 00:02:34.894444169 +0200 +@@ -22,7 +22,7 @@ + + #include "includes.h" + +-static_decl_rpc; ++/* AVM ???? static_decl_rpc; */ + + static int am_parent = 1; + +@@ -617,6 +617,7 @@ + **************************************************************************/ + void reload_printers(void) + { ++#ifndef AVM_NO_PRINTING + int snum; + int n_services = lp_numservices(); + int pnum = lp_servicenumber(PRINTERS_NAME); +@@ -643,6 +644,7 @@ + } + + load_printers(); ++#endif /* AVM_NO_PRINTING */ + } + + /**************************************************************************** +@@ -725,7 +727,9 @@ + + invalidate_all_vuids(); + ++#ifndef AVM_NO_PRINTING + print_notify_send_messages(3); /* 3 second timeout. */ ++#endif + + /* delete our entry in the connections database. */ + yield_connection(NULL,""); +@@ -739,7 +743,9 @@ + #endif + + locking_end(); ++#ifndef AVM_NO_PRINTING + printing_end(); ++#endif + + if (how != SERVER_EXIT_NORMAL) { + int oldlevel = DEBUGLEVEL; +@@ -820,7 +826,9 @@ + mkproto.h. Mixing $(builddir) and $(srcdir) source files in the current + prototype generation system is too complicated. */ + ++#if 0 /* AVM */ + extern void build_options(BOOL screen); ++#endif + + int main(int argc,const char *argv[]) + { +@@ -833,6 +841,13 @@ + static char *ports = NULL; + static char *profile_level = NULL; + int opt; ++ ++#if 0 // AVM DEBUG ++ extern void crashdump_init(char*); ++ crashdump_init("smbd"); ++#endif ++ ++#ifndef AVM_NO_POPT + poptContext pc; + + struct poptOption long_options[] = { +@@ -842,7 +857,9 @@ + {"foreground", 'F', POPT_ARG_VAL, &Fork, False, "Run daemon in foreground (for daemontools, etc.)" }, + {"no-process-group", '\0', POPT_ARG_VAL, &no_process_group, True, "Don't create a new process group" }, + {"log-stdout", 'S', POPT_ARG_VAL, &log_stdout, True, "Log to stdout" }, ++#if 0 /* AVM */ + {"build-options", 'b', POPT_ARG_NONE, NULL, 'b', "Print build options" }, ++#endif + {"port", 'p', POPT_ARG_STRING, &ports, 0, "Listen on the specified ports"}, + {"profiling-level", 'P', POPT_ARG_STRING, &profile_level, 0, "Set profiling level","PROFILE_LEVEL"}, + POPT_COMMON_SAMBA +@@ -861,21 +878,31 @@ + pc = poptGetContext("smbd", argc, argv, long_options, 0); + + while((opt = poptGetNextOpt(pc)) != -1) { ++#if 0 /* AVM */ + switch (opt) { + case 'b': + build_options(True); /* Display output to screen as well as debug */ + exit(0); + break; + } ++#endif + } + + poptFreeContext(pc); ++#else ++ load_case_tables(); ++#endif /* AVM_NO_POPT */ ++ + + #ifdef HAVE_SETLUID + /* needed for SecureWare on SCO */ + setluid(0); + #endif + ++#if 1 /* AVM */ ++ setpriority(PRIO_PROCESS, 0, 19); /* be nice */ ++#endif ++ + sec_init(); + + set_remote_machine_name("smbd", False); +@@ -903,6 +930,16 @@ + /* make absolutely sure we run as root - to handle cases where people + are crazy enough to have it setuid */ + ++ generate_random_buffer(NULL, 0); ++ ++ /* make absolutely sure we run as root - to handle cases where people ++ are crazy enough to have it setuid */ ++ ++ gain_root_privilege(); ++ gain_root_group_privilege(); ++ ++ fault_setup((void (*)(void *))exit_server_fault); ++ dump_core_setup("smbd"); + gain_root_privilege(); + gain_root_group_privilege(); + +@@ -945,8 +982,10 @@ + DEBUG(2,("uid=%d gid=%d euid=%d egid=%d\n", + (int)getuid(),(int)getgid(),(int)geteuid(),(int)getegid())); + ++#if 0 /* AVM */ + /* Output the build options to the debug log */ + build_options(False); ++#endif + + if (sizeof(uint16) < 2 || sizeof(uint32) < 4) { + DEBUG(0,("ERROR: Samba is not configured correctly for the word size on your machine\n")); +@@ -1042,16 +1081,20 @@ + + namecache_enable(); + ++#ifndef AVM_SMALLER + if (!init_registry()) + exit(1); ++#endif + + #if 0 + if (!init_svcctl_db()) + exit(1); + #endif + ++#ifndef AVM_NO_PRINTING + if (!print_backend_init()) + exit(1); ++#endif + + if (!init_guest_info()) { + DEBUG(0,("ERROR: failed to setup guest info.\n")); +@@ -1068,14 +1111,18 @@ + smbd is launched via inetd and we fork a copy of + ourselves here */ + ++#ifndef AVM_NO_PRINTING + if ( is_daemon && !interactive ) + start_background_queue(); ++#endif + ++#if 0 /* AVM */ + /* Always attempt to initialize DMAPI. We will only use it later if + * lp_dmapi_support is set on the share, but we need a single global + * session to work with. + */ + dmapi_init_session(); ++#endif + + if (!open_sockets_smbd(is_daemon, interactive, ports)) + exit(1); +@@ -1084,7 +1131,12 @@ + * everything after this point is run after the fork() + */ + ++#if 0 /* AVM */ + static_init_rpc; ++#else ++ rpc_wkssvc_init(); ++ rpc_srv_init(); ++#endif + + init_modules(); + +Index: samba-3.0.37/source/smbd/service.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/service.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/service.c 2011-08-09 00:02:34.894444169 +0200 +@@ -288,6 +288,7 @@ + iService = add_home_service(service,service /* 'username' */, phome_dir); + } + ++#ifndef AVM_NO_PRINTING + /* If we still don't have a service, attempt to add it as a printer. */ + if (iService < 0) { + int iPrinterService; +@@ -307,6 +308,7 @@ + } + } + } ++#endif /* AVM_NO_PRINTING */ + + /* Check for default vfs service? Unsure whether to implement this */ + if (iService < 0) { +@@ -1225,7 +1227,9 @@ + void close_cnum(connection_struct *conn, uint16 vuid) + { + if (IS_IPC(conn)) { ++#ifndef AVM_SMALLER + pipe_close_conn(conn); ++#endif + } else { + file_close_conn(conn); + dptr_closecnum(conn); +Index: samba-3.0.37/source/smbd/trans2.c +=================================================================== +--- samba-3.0.37.orig/source/smbd/trans2.c 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/smbd/trans2.c 2011-08-09 00:02:34.904444169 +0200 +@@ -2878,11 +2878,14 @@ + /* unknown_2 6 NULL bytes follow*/ + + /* now set the quotas */ ++#if 1 /* AVM */ ++ return ERROR_DOS(ERRSRV,ERRerror); ++#else + if (vfs_set_ntquota(fsp, SMB_USER_FS_QUOTA_TYPE, NULL, "as)!=0) { + DEBUG(0,("vfs_set_ntquota() failed for service [%s]\n",lp_servicename(SNUM(conn)))); + return ERROR_DOS(ERRSRV,ERRerror); + } +- ++#endif + break; + } + default: +Index: samba-3.0.37/source/utils/avm_smbpasswd.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ samba-3.0.37/source/utils/avm_smbpasswd.c 2011-08-09 00:02:34.904444169 +0200 +@@ -0,0 +1,212 @@ ++/* ++ * Unix SMB/CIFS implementation. ++ * Copyright (C) Jeremy Allison 1995-1998 ++ * Copyright (C) Tim Potter 2001 ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., 675 ++ * Mass Ave, Cambridge, MA 02139, USA. */ ++ ++#include "includes.h" ++ ++ ++void E_md4hash(const char *passwd, uchar p16[16]) ++{ ++ int len; ++ smb_ucs2_t wpwd[129]; ++ int i; ++ ++ ++ /* Password must be converted to NT unicode - null terminated. */ ++ len = strlen(passwd); ++#if 0 ++ push_ucs2(NULL, wpwd, (const char *)passwd, 256, STR_UNICODE|STR_NOALIGN|STR_TERMINATE); ++#else ++ for (i = 0; i < len; i++) { ++ wpwd[i] = (unsigned char)passwd[i]; ++ } ++ wpwd[i] = 0; // termination ++#endif ++ /* Calculate length in bytes */ ++ len = len /*strlen_w(wpwd)*/ * sizeof(int16); ++ ++ mdfour(p16, (unsigned char *)wpwd, len); ++ ZERO_STRUCT(wpwd); ++} ++ ++/** ++ * Creates the DES forward-only Hash of the users password in DOS ASCII charset ++ * @param passwd password in 'unix' charset. ++ * @param p16 return password hashed with DES, caller allocated 16 byte buffer ++ * @return False if password was > 14 characters, and therefore may be incorrect, otherwise True ++ * @note p16 is filled in regardless ++ */ ++ ++BOOL E_deshash(const char *passwd, uchar p16[16]) ++{ ++ BOOL ret = True; ++ char dospwd[256+2]; ++ int i; ++ int len; ++ ++ /* Password must be converted to DOS charset - null terminated, uppercase. */ ++// push_ascii(dospwd, passwd, sizeof(dospwd), STR_UPPER|STR_TERMINATE); ++ len = strlen(passwd); ++ for (i = 0; i < len; i++) { ++ char c = passwd[i]; ++ if (islower(c)) c = toupper(c); ++ dospwd[i] = c; ++ } ++ dospwd[i] = 0; ++ ++ /* Only the fisrt 14 chars are considered, password need not be null terminated. */ ++ E_P16((const unsigned char *)dospwd, p16); ++ ++ if (strlen(dospwd) > 14) { ++ ret = False; ++ } ++ ++ memset(dospwd, 0, sizeof(dospwd)); ++ // ZERO_STRUCT(dospwd); ++ ++ return ret; ++} ++ ++static void my_pdb_sethexpwd(char *p, const unsigned char *pwd) ++{ ++ if (pwd != NULL) { ++ int i; ++ for (i = 0; i < 16; i++) ++ slprintf(&p[i*2], 3, "%02X", pwd[i]); ++ } else { ++ strncpy(p, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 32); ++ } ++} ++ ++static void crypt_password (const char *user_name, ++ const char *new_passwd, char *new_lanman_p16, char *new_nt_p16) ++{ ++ /* Calculate the MD4 hash (NT compatible) of the password */ ++ E_md4hash(new_passwd, new_nt_p16); ++ ++ if (!E_deshash(new_passwd, new_lanman_p16)) { ++ /* E_deshash returns false for 'long' passwords (> 14 ++ DOS chars). This allows us to match Win2k, which ++ does not store a LM hash for these passwords (which ++ would reduce the effective password length to 14 */ ++ ++ memset(new_lanman_p16, 0, LM_HASH_LEN); ++ } ++} ++ ++/* ++ftpuser:1000:8C6F5D02DEB21501AAD3B435B51404EE:E0FBA38268D0EC66EF1CB452D5885E53:[UX ]:LCT-00000000: ++*/ ++ ++/********************************************************* ++ Start here. ++**********************************************************/ ++int main(int argc, char **argv) ++{ ++ char *passwd_filename = "/var/samba/private/smbpasswd"; ++ char *cleartext_filename = "/var/tmp/smbpasswd.cleartext"; ++ ++ if (argc != 1) { ++ fprintf(stderr, "use: smbpasswd\n"); ++ fprintf(stderr, " file %s will be encrypted to %s\n", cleartext_filename, passwd_filename); ++ return -9; ++ } ++ ++ FILE *fp = fopen(passwd_filename, "w"); ++ ++ if (fp == NULL) { ++ fprintf(stderr, "can't write %s\n", passwd_filename); ++ return -10; ++ } ++ /* Make sure it is only rw by the owner */ ++ chmod(passwd_filename, 0600); ++ ++ ++ FILE *fp_in = fopen(cleartext_filename, "r"); ++ if (!fp_in) { ++ fprintf(stderr, "can't read %s\n", cleartext_filename); ++ fclose(fp); ++ return -11; ++ } ++ ++ ++ char line[512]; ++ ++ unsigned nusers = 0; ++ while(line == fgets(line, sizeof(line)-1, fp_in)) { ++ char *username, *passwd, *extra; ++ unsigned uid; ++ uchar new_lanman_p16[LM_HASH_LEN]; ++ uchar new_nt_p16[NT_HASH_LEN]; ++ char ascii_p16[32+1]; ++ char *p; ++ ++ line[sizeof(line)-1] = '\0'; ++ if (strlen(line)) { ++ p = &line[strlen(line)-1]; ++ while(p >= line) { ++ if (*p != '\n' && *p != '\r') break; ++ *p = '\0'; ++ p--; ++ } ++ } ++ ++ p = line; ++ char *p2 = strchr(p, ':'); ++ if (!p2) goto err; ++ *p2 = 0; ++ username = p; ++ ++ p = p2 + 1; ++ p2 = strchr(p, ':'); ++ if (!p2) goto err; ++ *p2 = 0; ++ uid = atoi(p); ++ ++ p = p2 + 1; ++ p2 = strchr(p, ':'); ++ if (!p2) goto err; ++ *p2 = 0; ++ passwd = p; ++ ++ extra = p2 + 1; ++ ++ crypt_password(username, passwd, new_lanman_p16, new_nt_p16); ++ ++ fprintf(fp, "%s:%u:", username, uid); ++ ++ my_pdb_sethexpwd(ascii_p16, new_lanman_p16); ++ ascii_p16[32] = '\0'; ++ fprintf(fp, "%s:", ascii_p16); ++ ++ my_pdb_sethexpwd(ascii_p16, new_nt_p16); ++ ascii_p16[32] = '\0'; ++ fprintf(fp, "%s:", ascii_p16); ++ ++ fprintf(fp, "%s\n", extra); ++ ++ nusers++; ++ } // while ++ ++err: ++ fclose(fp_in); ++ fclose(fp); ++ ++fprintf(stderr, "%u samba users written to %s\n", nusers, passwd_filename); ++ return 0; ++} +Index: samba-3.0.37/source/Makefile.in +=================================================================== +--- samba-3.0.37.orig/source/Makefile.in 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/Makefile.in 2011-08-09 14:13:50.623167315 +0200 +@@ -257,7 +257,7 @@ + lib/adt_tree.o lib/gencache.o $(TDB_OBJ) \ + lib/module.o lib/events.o lib/ldap_escape.o @CHARSET_STATIC@ \ + lib/secdesc.o lib/util_seaccess.o lib/secace.o lib/secacl.o \ +- libads/krb5_errs.o lib/system_smbd.o lib/audit.o ++ lib/system_smbd.o lib/audit.o + + LIB_OBJ = $(LIB_WITHOUT_PROTO_OBJ) $(LIB_WITH_PROTO_OBJ) + +@@ -272,7 +272,7 @@ + + PARAM_OBJ = dynconfig.o param/loadparm.o param/params.o lib/sharesec.o lib/ldap_debug_handler.o + +-KRBCLIENT_OBJ = libads/kerberos.o libads/ads_status.o ++KRBCLIENT_OBJ = libads/ads_status.o + + LIBADDNS_OBJ0 = libaddns/dnsrecord.o libaddns/dnsutils.o libaddns/dnssock.o \ + libaddns/dnsgss.o libaddns/dnsmarshall.o +@@ -282,14 +282,9 @@ + libgpo/gpo_fetch.o libgpo/gpo_filesync.o + LIBGPO_OBJ = $(LIBGPO_OBJ0) + +-LIBADS_OBJ = libads/ldap.o libads/ldap_printer.o libads/sasl.o \ +- libads/krb5_setpw.o libads/ldap_user.o \ +- libads/ads_struct.o libads/kerberos_keytab.o \ +- libads/disp_sec.o libads/ads_utils.o libads/ldap_utils.o \ +- libads/authdata.o libads/cldap.o libads/util.o ++LIBADS_OBJ = + +-LIBADS_SERVER_OBJ = libads/kerberos_verify.o \ +- libads/ldap_schema.o ++LIBADS_SERVER_OBJ = + + SECRETS_OBJ = passdb/secrets.o passdb/machine_sid.o + +@@ -471,7 +466,7 @@ + printing/printfsp.o lib/sysquotas.o lib/sysquotas_linux.o \ + lib/sysquotas_xfs.o lib/sysquotas_4A.o \ + smbd/change_trust_pw.o smbd/fake_file.o \ +- smbd/quotas.o smbd/ntquotas.o $(AFS_OBJ) smbd/msdfs.o \ ++ smbd/ntquotas.o $(AFS_OBJ) smbd/msdfs.o \ + $(AFS_SETTOKEN_OBJ) smbd/aio.o smbd/statvfs.o \ + smbd/dmapi.o $(MANGLE_OBJ) @VFS_STATIC@ + +@@ -821,9 +816,9 @@ + NTLM_AUTH_OBJ1 = utils/ntlm_auth.o utils/ntlm_auth_diagnostics.o + + NTLM_AUTH_OBJ = ${NTLM_AUTH_OBJ1} $(LIBSAMBA_OBJ) $(POPT_LIB_OBJ) \ +- libsmb/asn1.o libsmb/spnego.o libsmb/clikrb5.o libads/kerberos.o \ +- libads/kerberos_verify.o $(SECRETS_OBJ) $(SERVER_MUTEX_OBJ) \ +- libads/authdata.o $(RPC_PARSE_OBJ1) $(PASSDB_OBJ) $(GROUPDB_OBJ) \ ++ libsmb/asn1.o libsmb/spnego.o libsmb/clikrb5.o \ ++ $(SECRETS_OBJ) $(SERVER_MUTEX_OBJ) \ ++ $(RPC_PARSE_OBJ1) $(PASSDB_OBJ) $(GROUPDB_OBJ) \ + $(SMBLDAP_OBJ) $(DOSERR_OBJ) rpc_parse/parse_net.o $(LIBNMB_OBJ) \ + $(LDB_OBJ) libsmb/errormap.o + diff --git a/samba3/patches/110-compile_fixes.patch b/samba3/patches/110-compile_fixes.patch new file mode 100644 index 000000000..d080c2ca6 --- /dev/null +++ b/samba3/patches/110-compile_fixes.patch @@ -0,0 +1,48 @@ +Index: samba-3.0.37/source/popt/popt.c +=================================================================== +--- samba-3.0.37.orig/source/popt/popt.c 2011-04-11 23:35:04.000000000 +0200 ++++ samba-3.0.37/source/popt/popt.c 2011-04-11 23:35:10.000000000 +0200 +@@ -10,13 +10,14 @@ + + #include "system.h" + +-#if HAVE_FLOAT_H ++//#if HAVE_FLOAT_H + #include +-#endif ++//#endif + #include + + #include "findme.h" + #include "poptint.h" ++#include "../include/config.h" + + #ifdef MYDEBUG + /*@unchecked@*/ +@@ -388,7 +389,7 @@ + sprintf(s, "%s/%s", con->execPath, item->argv[0]); + argv[argc] = s; + } else { +- argv[argc] = findProgramPath(item->argv[0]); ++ argv[argc] = ""/*findProgramPath(item->argv[0])*/; + } + if (argv[argc++] == NULL) return POPT_ERROR_NOARG; + +@@ -1246,4 +1247,3 @@ + + return numargs; + } +-/*@=boundswrite@*/ +Index: samba-3.0.37/source/modules/vfs_default.c +=================================================================== +--- samba-3.0.37.orig/source/modules/vfs_default.c 2011-04-11 23:35:08.000000000 +0200 ++++ samba-3.0.37/source/modules/vfs_default.c 2011-04-11 23:35:10.000000000 +0200 +@@ -977,7 +977,7 @@ + + START_PROFILE(syscall_linux_setlease); + +-#ifdef LINUX ++#if defined(LINUX) && defined(HAVE_KERNEL_OPLOCKS_LINUX) + /* first set the signal handler */ + if(linux_set_lease_sighandler(fd) == -1) + return -1; diff --git a/samba3/patches/120-owrt_paths.patch b/samba3/patches/120-owrt_paths.patch new file mode 100644 index 000000000..ee891ae9a --- /dev/null +++ b/samba3/patches/120-owrt_paths.patch @@ -0,0 +1,39 @@ +Index: samba-3.0.37/source/Makefile.in +=================================================================== +--- samba-3.0.37.orig/source/Makefile.in 2009-09-30 14:21:56.000000000 +0200 ++++ samba-3.0.37/source/Makefile.in 2011-04-03 20:35:19.000000000 +0200 +@@ -92,7 +92,7 @@ + # or in smb.conf (see smb.conf(5)) + LOGFILEBASE = @logfilebase@ + CONFIGFILE = $(CONFIGDIR)/smb.conf +-LMHOSTSFILE = $(CONFIGDIR)/lmhosts ++LMHOSTSFILE = /etc/lmhosts + + # This is where smbpasswd et al go + PRIVATEDIR = @privatedir@ +Index: samba-3.0.37/source/configure +=================================================================== +--- samba-3.0.37.orig/source/configure 2009-09-30 15:08:58.000000000 +0200 ++++ samba-3.0.37/source/configure 2011-04-03 20:35:20.000000000 +0200 +@@ -1536,8 +1536,8 @@ + --with-fhs Use FHS-compliant paths (default=no) + --with-privatedir=DIR Where to put smbpasswd ($ac_default_prefix/private) + --with-rootsbindir=DIR Which directory to use for root sbin ($ac_default_prefix/sbin) +- --with-lockdir=DIR Where to put lock files ($ac_default_prefix/var/locks) +- --with-piddir=DIR Where to put pid files ($ac_default_prefix/var/locks) ++ --with-lockdir=DIR Where to put lock files ($ac_default_prefix/var/lock) ++ --with-piddir=DIR Where to put pid files ($ac_default_prefix/var/run) + --with-swatdir=DIR Where to put SWAT files ($ac_default_prefix/swat) + --with-configdir=DIR Where to put configuration files ($libdir) + --with-logfilebase=DIR Where to put log files ($VARDIR) +@@ -2295,8 +2295,8 @@ + + + rootsbindir="\${SBINDIR}" +-lockdir="\${VARDIR}/locks" +-piddir="\${VARDIR}/locks" ++lockdir="\${VARDIR}/lock" ++piddir="\${VARDIR}/run" + test "${mandir}" || mandir="\${prefix}/man" + logfilebase="\${VARDIR}" + privatedir="\${prefix}/private" diff --git a/samba3/patches/130-owrt_smbpasswd.patch b/samba3/patches/130-owrt_smbpasswd.patch new file mode 100644 index 000000000..75be7401a --- /dev/null +++ b/samba3/patches/130-owrt_smbpasswd.patch @@ -0,0 +1,216 @@ +Index: samba-3.0.37/source/Makefile.in +=================================================================== +--- samba-3.0.37.orig/source/Makefile.in 2011-08-08 23:40:18.004444730 +0200 ++++ samba-3.0.37/source/Makefile.in 2011-08-08 23:40:19.054444730 +0200 +@@ -538,10 +538,7 @@ + + PASSWD_UTIL_OBJ = utils/passwd_util.o + +-SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \ +- $(PARAM_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) \ +- $(GROUPDB_OBJ) $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \ +- $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) ++SMBPASSWD_OBJ = utils/owrt_smbpasswd.o lib/md4.o + + PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) \ + $(LIBSAMBA_OBJ) $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \ +Index: samba-3.0.37/source/utils/owrt_smbpasswd.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ samba-3.0.37/source/utils/owrt_smbpasswd.c 2011-08-08 23:40:19.064444730 +0200 +@@ -0,0 +1,195 @@ ++/* ++ * Copyright (C) John Crispin ++ * ++ * 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 2 of the License, or (at your ++ * option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., 675 ++ * Mass Ave, Cambridge, MA 02139, USA. */ ++ ++#include "includes.h" ++#include ++ ++void E_md4hash(const char *passwd, uchar p16[16]) ++{ ++ int len; ++ smb_ucs2_t wpwd[129]; ++ int i; ++ ++ len = strlen(passwd); ++ for (i = 0; i < len; i++) { ++#if __BYTE_ORDER == __LITTLE_ENDIAN ++ wpwd[i] = (unsigned char)passwd[i]; ++#else ++ wpwd[i] = (unsigned char)passwd[i] << 8; ++#endif ++ } ++ wpwd[i] = 0; ++ ++ len = len * sizeof(int16); ++ mdfour(p16, (unsigned char *)wpwd, len); ++ ZERO_STRUCT(wpwd); ++} ++ ++/* returns -1 if user is not present in /etc/passwd*/ ++int find_uid_for_user(char *user) ++{ ++ char t[256]; ++ FILE *fp = fopen("/etc/passwd", "r"); ++ int ret = -1; ++ ++ if(!fp) ++ { ++ printf("failed to open /etc/passwd"); ++ goto out; ++ } ++ ++ while(!feof(fp)) ++ { ++ if(fgets(t, 255, fp)) ++ { ++ char *p1, *p2; ++ p1 = strchr(t, ':'); ++ if(p1 && (p1 - t == strlen(user)) && (strncmp(t, user, strlen(user))) == 0) ++ { ++ p1 = strchr(t, ':'); ++ if(!p1) ++ goto out; ++ p2 = strchr(++p1, ':'); ++ if(!p2) ++ goto out; ++ p1 = strchr(++p2, ':'); ++ if(!p1) ++ goto out; ++ *p1 = '\0'; ++ ret = atoi(p2); ++ goto out; ++ } ++ } ++ } ++ printf("No valid user found in /etc/passwd\n"); ++ ++out: ++ if(fp) ++ fclose(fp); ++ return ret; ++} ++ ++void insert_user_in_smbpasswd(char *user, char *line) ++{ ++ char t[256]; ++ FILE *fp = fopen("/etc/samba/smbpasswd", "r+"); ++ ++ if(!fp) ++ { ++ printf("failed to open /etc/samba/smbpasswd"); ++ goto out; ++ } ++ ++ while(!feof(fp)) ++ { ++ if(fgets(t, 255, fp)) ++ { ++ char *p; ++ p = strchr(t, ':'); ++ if(p && (p - t == strlen(user)) && (strncmp(t, user, strlen(user))) == 0) ++ { ++ fseek(fp, -strlen(line), SEEK_CUR); ++ break; ++ } ++ } ++ } ++ ++ fprintf(fp, line); ++ ++out: ++ if(fp) ++ fclose(fp); ++} ++ ++void delete_user_from_smbpasswd(char *user) ++{ ++ char t[256]; ++ FILE *fp = fopen("/etc/samba/smbpasswd", "r+"); ++ ++ if(!fp) ++ { ++ printf("failed to open /etc/samba/smbpasswd"); ++ goto out; ++ } ++ ++ while(!feof(fp)) ++ { ++ if(fgets(t, 255, fp)) ++ { ++ char *p; ++ p = strchr(t, ':'); ++ if(p && (p - t == strlen(user)) && (strncmp(t, user, strlen(user))) == 0) ++ { ++ fpos_t r_pos, w_pos; ++ char t2[256]; ++ fgetpos(fp, &r_pos); ++ w_pos = r_pos; ++ w_pos.__pos -= strlen(t); ++ while(fgets(t2, 256, fp)) ++ { ++ fsetpos(fp, &w_pos); ++ fputs(t2, fp); ++ r_pos.__pos += strlen(t2); ++ w_pos.__pos += strlen(t2); ++ fsetpos(fp, &r_pos); ++ } ++ ftruncate(fileno(fp), w_pos.__pos); ++ break; ++ } ++ } ++ } ++ ++out: ++ if(fp) ++ fclose(fp); ++} ++ ++int main(int argc, char **argv) ++{ ++ unsigned uid; ++ uchar new_nt_p16[NT_HASH_LEN]; ++ int g; ++ int smbpasswd_present; ++ char smbpasswd_line[256]; ++ char *s; ++ ++ if(argc != 3) ++ { ++ printf("usage for openwrt_smbpasswd - \n\t%s USERNAME PASSWD\n\t%s -del USERNAME\n", argv[0], argv[0]); ++ exit(1); ++ } ++ if(strcmp(argv[1], "-del") == 0) ++ { ++ printf("deleting user %s\n", argv[2]); ++ delete_user_from_smbpasswd(argv[2]); ++ return 0; ++ } ++ uid = find_uid_for_user(argv[1]); ++ if(uid == -1) ++ exit(2); ++ ++ E_md4hash(argv[2], new_nt_p16); ++ s = smbpasswd_line; ++ s += snprintf(s, 256 - (s - smbpasswd_line), "%s:%u:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:", argv[1], uid); ++ for(g = 0; g < 16; g++) ++ s += snprintf(s, 256 - (s - smbpasswd_line), "%02X", new_nt_p16[g]); ++ snprintf(s, 256 - (s - smbpasswd_line), ":[U ]:LCT-00000001:\n"); ++ ++ insert_user_in_smbpasswd(argv[1], smbpasswd_line); ++ ++ return 0; ++} diff --git a/samba3/patches/150-fix_ls.patch b/samba3/patches/150-fix_ls.patch new file mode 100644 index 000000000..10538d6be --- /dev/null +++ b/samba3/patches/150-fix_ls.patch @@ -0,0 +1,15 @@ +Index: samba-3.0.24/source/lib/ms_fnmatch.c +=================================================================== +--- samba-3.0.24.orig/source/lib/ms_fnmatch.c 2008-08-11 11:08:03.000000000 +0200 ++++ samba-3.0.24/source/lib/ms_fnmatch.c 2008-08-11 11:11:33.000000000 +0200 +@@ -153,6 +153,10 @@ + int ret, count, i; + struct max_n *max_n = NULL; + ++ if (strcmp(pattern, "*") == 0) { ++ return 0; ++ } ++ + if (strcmp(string, "..") == 0) { + string = "."; + } diff --git a/samba3/patches/160-fix_log.patch b/samba3/patches/160-fix_log.patch new file mode 100644 index 000000000..9396b4d59 --- /dev/null +++ b/samba3/patches/160-fix_log.patch @@ -0,0 +1,13 @@ +Index: samba-3.0.24/source/lib/popt_common.c +=================================================================== +--- samba-3.0.24.orig/source/lib/popt_common.c 2008-08-11 11:25:26.000000000 +0200 ++++ samba-3.0.24/source/lib/popt_common.c 2008-08-11 11:26:03.000000000 +0200 +@@ -54,7 +54,7 @@ + else + pname++; + +- pstr_sprintf(logfile, "%s/log.%s", arg, pname); ++ pstr_sprintf(logfile, "%s/log/%s.log", arg, pname); + lp_set_logfile(logfile); + } + diff --git a/samba3/patches/170-no_rpc.patch b/samba3/patches/170-no_rpc.patch new file mode 100644 index 000000000..0882c7017 --- /dev/null +++ b/samba3/patches/170-no_rpc.patch @@ -0,0 +1,23 @@ + +Index: samba-3.0.37/source/configure +=================================================================== +--- samba-3.0.37.orig/source/configure 2011-04-03 20:35:20.000000000 +0200 ++++ samba-3.0.37/source/configure 2011-04-03 20:36:51.000000000 +0200 +@@ -22548,6 +22548,17 @@ + { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 + $as_echo "$ac_header_preproc" >&6; } + ++# Force disable RPC ++$as_echo "test=$ac_header" >&6 ++if test "$ac_header" = "rpc/rpc.h"; then ++ if test "$ac_header_compiler" = "yes" -o "$ac_header_preproc" = "yes"; then ++ $as_echo "RPC support force disabled by OpenWRT patch" >&5 ++ $as_echo "RPC support force disabled by OpenWRT patch" >&6 ++ fi ++fi ++ac_header_compiler=no ++ac_header_preproc=no ++ + # So? What about this header? + case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) diff --git a/samba3/patches/190-fix_configure_for_crosscompilation.patch b/samba3/patches/190-fix_configure_for_crosscompilation.patch new file mode 100644 index 000000000..eb7af62f6 --- /dev/null +++ b/samba3/patches/190-fix_configure_for_crosscompilation.patch @@ -0,0 +1,28 @@ +Index: samba-3.0.37/source/configure.in +=================================================================== +--- samba-3.0.37.orig/source/configure.in ++++ samba-3.0.37/source/configure.in +@@ -1389,23 +1389,6 @@ AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl + case "$host_os" in + *linux*) + # glibc <= 2.3.2 has a broken getgrouplist +- AC_TRY_RUN([ +-#include +-#include +-main() { +- /* glibc up to 2.3 has a broken getgrouplist */ +-#if defined(__GLIBC__) && defined(__GLIBC_MINOR__) +- int libc_major = __GLIBC__; +- int libc_minor = __GLIBC_MINOR__; +- +- if (libc_major < 2) +- exit(1); +- if ((libc_major == 2) && (libc_minor <= 3)) +- exit(1); +-#endif +- exit(0); +-} +-], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no]) + if test x"$linux_getgrouplist_ok" = x"yes"; then + AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist]) + fi diff --git a/samba3/patches/200-fix-configure.patch b/samba3/patches/200-fix-configure.patch new file mode 100644 index 000000000..2ab0d61ab --- /dev/null +++ b/samba3/patches/200-fix-configure.patch @@ -0,0 +1,12 @@ +Get rid of error due to cross compilation, as glibc version in OpenWRT is high enough +--- a/source/configure ++++ b/source/configure +@@ -37222,7 +37222,7 @@ rm -f core conftest.err conftest.$ac_obj + case "$host_os" in + *linux*) + # glibc <= 2.3.2 has a broken getgrouplist +- if test "$cross_compiling" = yes; then ++ if test "false" = yes; then + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 + $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling diff --git a/samba3/patches/500-remove_avm_smaller.patch b/samba3/patches/500-remove_avm_smaller.patch new file mode 100644 index 000000000..fdc07ddc1 --- /dev/null +++ b/samba3/patches/500-remove_avm_smaller.patch @@ -0,0 +1,76 @@ +--- a/source/Makefile.in ++++ b/source/Makefile.in +@@ -291,7 +291,7 @@ SECRETS_OBJ = passdb/secrets.o passdb/ma + LIBNMB_OBJ = libsmb/unexpected.o libsmb/namecache.o libsmb/nmblib.o \ + libsmb/namequery.o libsmb/conncache.o libads/dns.o + +-LIBSAMBA_OBJ = libsmb/nterr.o libsmb/dcerpc_err.o libsmb/smbdes.o \ ++LIBSAMBA_OBJ = libsmb/nterr.o $(if $(OWRT_SMALLER),,libsmb/dcerpc_err.o) libsmb/smbdes.o \ + libsmb/smbencrypt.o libsmb/ntlm_check.o \ + libsmb/ntlmssp.o libsmb/ntlmssp_parse.o libsmb/ntlmssp_sign.o + +@@ -323,35 +323,35 @@ REGISTRY_OBJ = registry/reg_frontend.o r + registry/reg_db.o registry/reg_eventlog.o registry/reg_shares.o \ + registry/reg_util.o registry/reg_dynamic.o registry/reg_perfcount.o + +-RPC_LSA_OBJ = rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o ++RPC_LSA_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_lsa.o rpc_server/srv_lsa_nt.o) + +-RPC_NETLOG_OBJ = rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o ++RPC_NETLOG_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_netlog.o rpc_server/srv_netlog_nt.o) + +-RPC_SAMR_OBJ = rpc_server/srv_samr.o rpc_server/srv_samr_nt.o \ +- rpc_server/srv_samr_util.o ++RPC_SAMR_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_samr.o rpc_server/srv_samr_nt.o \ ++ rpc_server/srv_samr_util.o) + + REGFIO_OBJ = registry/regfio.o + +-RPC_REG_OBJ = rpc_server/srv_reg.o rpc_server/srv_reg_nt.o $(REGFIO_OBJ) ++RPC_REG_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_reg.o rpc_server/srv_reg_nt.o $(REGFIO_OBJ)) + +-RPC_LSA_DS_OBJ = rpc_server/srv_lsa_ds.o rpc_server/srv_lsa_ds_nt.o ++RPC_LSA_DS_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_lsa_ds.o rpc_server/srv_lsa_ds_nt.o) + + RPC_SVC_OBJ = rpc_server/srv_srvsvc.o rpc_server/srv_srvsvc_nt.o + + RPC_WKS_OBJ = librpc/gen_ndr/srv_wkssvc.o rpc_server/srv_wkssvc_nt.o + +-RPC_SVCCTL_OBJ = rpc_server/srv_svcctl.o rpc_server/srv_svcctl_nt.o \ ++RPC_SVCCTL_OBJ = $(if $(OWRT_SMALLER),, rpc_server/srv_svcctl.o) rpc_server/srv_svcctl_nt.o \ + services/svc_spoolss.o services/svc_rcinit.o services/services_db.o \ + services/svc_netlogon.o services/svc_winreg.o \ + services/svc_wins.o + +-RPC_NTSVCS_OBJ = rpc_server/srv_ntsvcs.o rpc_server/srv_ntsvcs_nt.o ++RPC_NTSVCS_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_ntsvcs.o rpc_server/srv_ntsvcs_nt.o) + +-RPC_DFS_OBJ = rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o ++RPC_DFS_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o) + +-RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o ++RPC_SPOOLSS_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o) + +-RPC_EVENTLOG_OBJ = rpc_server/srv_eventlog.o rpc_server/srv_eventlog_nt.o rpc_server/srv_eventlog_lib.o ++RPC_EVENTLOG_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_eventlog.o rpc_server/srv_eventlog_nt.o rpc_server/srv_eventlog_lib.o) + + RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o \ + rpc_server/srv_pipe.o rpc_server/srv_lsa_hnd.o +@@ -431,7 +431,7 @@ PLAINTEXT_AUTH_OBJ = auth/pampass.o auth + + SLCACHE_OBJ = libsmb/samlogon_cache.o + +-DCUTIL_OBJ = libsmb/namequery_dc.o libsmb/trustdom_cache.o libsmb/trusts_util.o ++DCUTIL_OBJ = libsmb/namequery_dc.o $(if $(OWRT_SMALLER),,libsmb/trustdom_cache.o libsmb/trusts_util.o) + + AUTH_BUILTIN_OBJ = auth/auth_builtin.o + AUTH_DOMAIN_OBJ = auth/auth_domain.o +@@ -468,7 +468,7 @@ SMBD_OBJ_SRV = smbd/files.o smbd/chgpass + smbd/change_trust_pw.o smbd/fake_file.o \ + smbd/ntquotas.o $(AFS_OBJ) smbd/msdfs.o \ + $(AFS_SETTOKEN_OBJ) smbd/aio.o smbd/statvfs.o \ +- smbd/dmapi.o $(MANGLE_OBJ) @VFS_STATIC@ ++ $(if $(OWRT_SMALLER),,smbd/dmapi.o) $(MANGLE_OBJ) @VFS_STATIC@ + + SMBD_OBJ_BASE = $(PARAM_OBJ) $(SMBD_OBJ_SRV) $(LIBSMB_OBJ) \ + $(RPC_SERVER_OBJ) $(RPC_PARSE_OBJ) $(SECRETS_OBJ) \ diff --git a/samba3/patches/510-remove-printing.patch b/samba3/patches/510-remove-printing.patch new file mode 100644 index 000000000..c9260d183 --- /dev/null +++ b/samba3/patches/510-remove-printing.patch @@ -0,0 +1,47 @@ +--- a/source/Makefile.in ++++ b/source/Makefile.in +@@ -319,7 +319,7 @@ LIBMSRPC_GEN_OBJ = librpc/gen_ndr/cli_wk + + REGOBJS_OBJ = registry/reg_objects.o + +-REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o registry/reg_printing.o \ ++REGISTRY_OBJ = registry/reg_frontend.o registry/reg_cachehook.o $(if $(OWRT_NO_PRINTING),,registry/reg_printing.o) \ + registry/reg_db.o registry/reg_eventlog.o registry/reg_shares.o \ + registry/reg_util.o registry/reg_dynamic.o registry/reg_perfcount.o + +@@ -349,7 +349,7 @@ RPC_NTSVCS_OBJ = $(if $(OWRT_SMALLER),,r + + RPC_DFS_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_dfs.o rpc_server/srv_dfs_nt.o) + +-RPC_SPOOLSS_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o) ++RPC_SPOOLSS_OBJ = $(if $(OWRT_NO_PRINTING),,rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o) + + RPC_EVENTLOG_OBJ = $(if $(OWRT_SMALLER),,rpc_server/srv_eventlog.o rpc_server/srv_eventlog_nt.o rpc_server/srv_eventlog_lib.o) + +@@ -463,7 +463,7 @@ SMBD_OBJ_SRV = smbd/files.o smbd/chgpass + smbd/vfs.o smbd/statcache.o \ + smbd/posix_acls.o lib/sysacls.o $(SERVER_MUTEX_OBJ) \ + smbd/process.o smbd/service.o smbd/error.o \ +- printing/printfsp.o lib/sysquotas.o lib/sysquotas_linux.o \ ++ $(if $(OWRT_NO_PRINTING),,printing/printfsp.o) lib/sysquotas.o lib/sysquotas_linux.o \ + lib/sysquotas_xfs.o lib/sysquotas_4A.o \ + smbd/change_trust_pw.o smbd/fake_file.o \ + smbd/ntquotas.o $(AFS_OBJ) smbd/msdfs.o \ +@@ -480,13 +480,13 @@ SMBD_OBJ_BASE = $(PARAM_OBJ) $(SMBD_OBJ_ + $(REGISTRY_OBJ) $(POPT_LIB_OBJ) \ + $(BUILDOPT_OBJ) $(SMBLDAP_OBJ) + +-PRINTING_OBJ = printing/pcap.o printing/print_svid.o printing/print_aix.o \ ++PRINTING_OBJ = $(if $(OWRT_NO_PRINTING),,printing/pcap.o printing/print_svid.o printing/print_aix.o \ + printing/print_cups.o printing/print_generic.o \ + printing/lpq_parse.o printing/load.o \ +- printing/print_iprint.o printing/print_test.o ++ printing/print_iprint.o printing/print_test.o) + +-PRINTBASE_OBJ = printing/notify.o printing/printing_db.o +-PRINTBACKEND_OBJ = printing/printing.o printing/nt_printing.o $(PRINTBASE_OBJ) ++PRINTBASE_OBJ = $(if $(OWRT_NO_PRINTING),,printing/notify.o printing/printing_db.o) ++PRINTBACKEND_OBJ = $(if $(OWRT_NO_PRINTING),,printing/printing.o printing/nt_printing.o $(PRINTBASE_OBJ)) + + SMBD_OBJ = $(SMBD_OBJ_BASE) $(SMBD_OBJ_MAIN) + NMBD_OBJ1 = nmbd/asyncdns.o nmbd/nmbd.o nmbd/nmbd_become_dmb.o \