summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2005-08-12 16:29:00 +0000
committerGerald Carter <jerry@samba.org>2005-08-12 16:29:00 +0000
commit1aa282b7ae37643da90f835e17f9409afc05f61b (patch)
tree041038a0b3783a26b5c6cb4675a7ba50ac2d7a4f
parente1ce7b6887a99d7119cbea5a39aded1c0bb84915 (diff)
downloadsamba-1aa282b7ae37643da90f835e17f9409afc05f61b.tar.gz
r9268: bumping version to 3.0.20rc3
cherry picking fixes for 3.0.20 svn merge -r9200:9201 $SVNURL/branches/SAMBA_3_0 svn merge -r9201:9203 $SVNURL/branches/SAMBA_3_0 svn merge -r9203:9225 $SVNURL/branches/SAMBA_3_0 svn merge -r9225:9229 $SVNURL/branches/SAMBA_3_0 svn merge -r9229:9242 $SVNURL/branches/SAMBA_3_0 svn merge -r9242:9244 $SVNURL/branches/SAMBA_3_0 svn merge -r9244:9246 $SVNURL/branches/SAMBA_3_0 svn merge -r9246:9232 $SVNURL/branches/SAMBA_3_0 svn merge -r9246:9252 $SVNURL/branches/SAMBA_3_0 svn merge -r9252:9253 $SVNURL/branches/SAMBA_3_0 svn merge -r9253:9266 $SVNURL/branches/SAMBA_3_0
-rw-r--r--source/VERSION2
-rw-r--r--source/auth/auth_sam.c4
-rwxr-xr-xsource/client/mount.cifs.c24
-rw-r--r--source/include/doserr.h1
-rw-r--r--source/lib/sysquotas_4A.c28
-rw-r--r--source/nsswitch/winbindd_ads.c3
-rw-r--r--source/printing/printing.c24
-rw-r--r--source/rpc_server/srv_netlog_nt.c15
-rw-r--r--source/rpc_server/srv_samr_util.c39
-rw-r--r--source/rpc_server/srv_spoolss_nt.c5
-rw-r--r--source/smbd/trans2.c5
-rw-r--r--source/web/swat.c4
-rw-r--r--swat/help/welcome.html6
13 files changed, 120 insertions, 40 deletions
diff --git a/source/VERSION b/source/VERSION
index 560e6a294e9..306b21567ca 100644
--- a/source/VERSION
+++ b/source/VERSION
@@ -51,7 +51,7 @@ SAMBA_VERSION_PRE_RELEASE=
# e.g. SAMBA_VERSION_RC_RELEASE=1 #
# -> "3.0.0rc1" #
########################################################
-SAMBA_VERSION_RC_RELEASE=2
+SAMBA_VERSION_RC_RELEASE=3
########################################################
# To mark SVN snapshots this should be set to 'yes' #
diff --git a/source/auth/auth_sam.c b/source/auth/auth_sam.c
index 023e441e241..bb4df707ef7 100644
--- a/source/auth/auth_sam.c
+++ b/source/auth/auth_sam.c
@@ -78,6 +78,7 @@ static BOOL logon_hours_ok(SAM_ACCOUNT *sampass)
/* In logon hours first bit is Sunday from 12AM to 1AM */
const uint8 *hours;
struct tm *utctime;
+ time_t lasttime;
uint8 bitmask, bitpos;
hours = pdb_get_hours(sampass);
@@ -86,7 +87,8 @@ static BOOL logon_hours_ok(SAM_ACCOUNT *sampass)
return True;
}
- utctime = localtime(&smb_last_time.tv_sec);
+ lasttime = (time_t)smb_last_time.tv_sec;
+ utctime = localtime(&lasttime);
/* find the corresponding byte and bit */
bitpos = (utctime->tm_wday * 24 + utctime->tm_hour) % 168;
diff --git a/source/client/mount.cifs.c b/source/client/mount.cifs.c
index 9c0f582d85f..0c3b0b321e8 100755
--- a/source/client/mount.cifs.c
+++ b/source/client/mount.cifs.c
@@ -39,7 +39,7 @@
#include <fcntl.h>
#define MOUNT_CIFS_VERSION_MAJOR "1"
-#define MOUNT_CIFS_VERSION_MINOR "8"
+#define MOUNT_CIFS_VERSION_MINOR "9"
#ifndef MOUNT_CIFS_VENDOR_SUFFIX
#define MOUNT_CIFS_VENDOR_SUFFIX ""
@@ -127,8 +127,10 @@ static int open_cred_file(char * file_name)
if(fs == NULL)
return errno;
line_buf = malloc(4096);
- if(line_buf == NULL)
+ if(line_buf == NULL) {
+ fclose(fs);
return -ENOMEM;
+ }
while(fgets(line_buf,4096,fs)) {
/* parse line from credential file */
@@ -570,13 +572,15 @@ static void check_for_comma(char ** ppasswrd)
char *pass;
int i,j;
int number_of_commas = 0;
- int len = strlen(*ppasswrd);
+ int len;
if(ppasswrd == NULL)
return;
else
(pass = *ppasswrd);
+ len = strlen(pass);
+
for(i=0;i<len;i++) {
if(pass[i] == ',')
number_of_commas++;
@@ -692,7 +696,6 @@ static char * parse_server(char ** punc_name)
char * ipaddress_string = NULL;
struct hostent * host_entry;
struct in_addr server_ipaddr;
- int rc;
if(length > 1023) {
printf("mount error: UNC name too long");
@@ -715,6 +718,13 @@ static char * parse_server(char ** punc_name)
if(share) {
free_share_name = 1;
*punc_name = malloc(length+3);
+ if(*punc_name == NULL) {
+ /* put the original string back if
+ no memory left */
+ *punc_name = unc_name;
+ return NULL;
+ }
+
*share = '/';
strncpy((*punc_name)+2,unc_name,length);
unc_name = *punc_name;
@@ -744,8 +754,7 @@ continue_unc_parsing:
return NULL;
}
if(host_entry == NULL) {
- printf("mount error: could not find target server. TCP name %s not found ", unc_name);
- printf(" rc = %d\n",rc);
+ printf("mount error: could not find target server. TCP name %s not found\n", unc_name);
return NULL;
} else {
/* BB should we pass an alternate version of the share name as Unicode */
@@ -1018,6 +1027,9 @@ mount_retry:
optlen = 0;
if(share_name)
optlen += strlen(share_name) + 4;
+ else {
+ printf("No server share name specified\n");
+ }
if(user_name)
optlen += strlen(user_name) + 6;
if(ipaddr)
diff --git a/source/include/doserr.h b/source/include/doserr.h
index 647f11527b7..7c98171250c 100644
--- a/source/include/doserr.h
+++ b/source/include/doserr.h
@@ -72,6 +72,7 @@
#define ERRpipeclosing 232 /* named pipe close in progress */
#define ERRnotconnected 233 /* No process on other end of named pipe */
#define ERRmoredata 234 /* More data to be returned */
+#define ERReainconsistent 255 /* from EMC */
#define ERRnomoreitems 259
#define ERRbaddirectory 267 /* Invalid directory name in a path. */
#define ERReasnotsupported 282 /* Extended attributes */
diff --git a/source/lib/sysquotas_4A.c b/source/lib/sysquotas_4A.c
index 5a7d84fca91..5596481bd29 100644
--- a/source/lib/sysquotas_4A.c
+++ b/source/lib/sysquotas_4A.c
@@ -95,7 +95,7 @@ int sys_get_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_USER_QUOTA_TYPE uid[%u]\n",
path, bdev, (unsigned)id.uid));
- if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), bdev, id.uid, (void *)&D))&&errno != EDQUOT) {
+ if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D))&&errno != EDQUOT) {
return ret;
}
@@ -112,7 +112,7 @@ int sys_get_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_GROUP_QUOTA_TYPE gid[%u]\n",
path, bdev, (unsigned)id.gid));
- if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), bdev, id.gid, (void *)&D))&&errno != EDQUOT) {
+ if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D))&&errno != EDQUOT) {
return ret;
}
@@ -129,9 +129,9 @@ int sys_get_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
id.uid = getuid();
DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_USER_FS_QUOTA_TYPE (uid[%u])\n",
- path, bdev, (unsigned)id.uid));
+ path, (caddr_t)bdev, (unsigned)id.uid));
- if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), bdev, id.uid, (void *)&D))==0) {
+ if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D))==0) {
qflags |= QUOTAS_DENY_DISK;
}
@@ -144,7 +144,7 @@ int sys_get_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
DEBUG(10,("sys_get_vfs_quota: path[%s] bdev[%s] SMB_GROUP_FS_QUOTA_TYPE (gid[%u])\n",
path, bdev, (unsigned)id.gid));
- if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), bdev, id.gid, (void *)&D))==0) {
+ if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D))==0) {
qflags |= QUOTAS_DENY_DISK;
}
@@ -202,14 +202,14 @@ int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
DEBUG(10,("sys_set_vfs_quota: path[%s] bdev[%s] SMB_USER_QUOTA_TYPE uid[%u]\n",
path, bdev, (unsigned)id.uid));
- ret = quotactl(QCMD(Q_SETQLIM,USRQUOTA), bdev, id.uid, (void *)&D);
+ ret = quotactl(QCMD(Q_SETQLIM,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D);
break;
#ifdef HAVE_GROUP_QUOTA
case SMB_GROUP_QUOTA_TYPE:
DEBUG(10,("sys_set_vfs_quota: path[%s] bdev[%s] SMB_GROUP_QUOTA_TYPE gid[%u]\n",
path, bdev, (unsigned)id.gid));
- ret = quotactl(QCMD(Q_SETQLIM,GRPQUOTA), bdev, id.gid, (void *)&D);
+ ret = quotactl(QCMD(Q_SETQLIM,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D);
break;
#endif /* HAVE_GROUP_QUOTA */
case SMB_USER_FS_QUOTA_TYPE:
@@ -228,7 +228,7 @@ int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
path, bdev, (unsigned)id.uid));
#if 0
- ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), bdev, id.uid, (void *)&D);
+ ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D);
if ((qflags&QUOTAS_DENY_DISK)||(qflags&QUOTAS_ENABLED)) {
if (ret == 0) {
@@ -241,14 +241,14 @@ int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
return -1;
}
- ret = quotactl(QCMD(Q_QUOTAON,USRQUOTA), bdev, -1,(void *)quota_file);
+ ret = quotactl(QCMD(Q_QUOTAON,USRQUOTA), (caddr_t)bdev, -1,(void *)quota_file);
} else {
ret = 0;
}
} else {
if (ret != 0) {
/* turn off */
- ret = quotactl(QCMD(Q_QUOTAOFF,USRQUOTA), bdev, -1, (void *)0);
+ ret = quotactl(QCMD(Q_QUOTAOFF,USRQUOTA), (caddr_t)bdev, -1, (void *)0);
} else {
ret = 0;
}
@@ -257,7 +257,7 @@ int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
DEBUG(0,("sys_set_vfs_quota: ret(%d) errno(%d)[%s] uid(%d) bdev[%s]\n",
ret,errno,strerror(errno),id.uid,bdev));
#else
- if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), bdev, id.uid, (void *)&D))==0) {
+ if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), (caddr_t)bdev, id.uid, (void *)&D))==0) {
oldqflags |= QUOTAS_DENY_DISK;
}
@@ -298,14 +298,14 @@ int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
return -1;
}
- ret = quotactl(QCMD(Q_QUOTAON,GRPQUOTA), bdev, -1,(void *)quota_file);
+ ret = quotactl(QCMD(Q_QUOTAON,GRPQUOTA), (caddr_t)bdev, -1,(void *)quota_file);
} else {
ret = 0;
}
} else {
if (ret != 0) {
/* turn off */
- ret = quotactl(QCMD(Q_QUOTAOFF,GRPQUOTA), bdev, -1, (void *)0);
+ ret = quotactl(QCMD(Q_QUOTAOFF,GRPQUOTA), (caddr_t)bdev, -1, (void *)0);
} else {
ret = 0;
}
@@ -314,7 +314,7 @@ int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_TYPE qt
DEBUG(0,("sys_set_vfs_quota: ret(%d) errno(%d)[%s] uid(%d) bdev[%s]\n",
ret,errno,strerror(errno),id.gid,bdev));
#else
- if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), bdev, id.gid, (void *)&D))==0) {
+ if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), (caddr_t)bdev, id.gid, (void *)&D))==0) {
oldqflags |= QUOTAS_DENY_DISK;
}
diff --git a/source/nsswitch/winbindd_ads.c b/source/nsswitch/winbindd_ads.c
index 3041b736f71..50899714475 100644
--- a/source/nsswitch/winbindd_ads.c
+++ b/source/nsswitch/winbindd_ads.c
@@ -640,7 +640,8 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
char *sidstr;
char **members;
- int i, num_members;
+ int i;
+ size_t num_members;
fstring sid_string;
BOOL more_values;
const char **attrs;
diff --git a/source/printing/printing.c b/source/printing/printing.c
index 2a7cd5d3a74..52a30704667 100644
--- a/source/printing/printing.c
+++ b/source/printing/printing.c
@@ -399,8 +399,10 @@ uint32 sysjob_to_jobid(int unix_jobid)
if (!lp_print_ok(snum))
continue;
pdb = get_print_db_byname(lp_const_servicename(snum));
- if (pdb)
- tdb_traverse(pdb->tdb, unixjob_traverse_fn, &unix_jobid);
+ if (!pdb) {
+ continue;
+ }
+ tdb_traverse(pdb->tdb, unixjob_traverse_fn, &unix_jobid);
release_print_db(pdb);
if (sysjob_to_jobid_value != (uint32)-1)
return sysjob_to_jobid_value;
@@ -1067,6 +1069,10 @@ static void print_queue_update_internal( const char *sharename,
TDB_DATA jcdata;
fstring keystr, cachestr;
struct tdb_print_db *pdb = get_print_db_byname(sharename);
+
+ if (!pdb) {
+ return;
+ }
DEBUG(5,("print_queue_update_internal: printer = %s, type = %d, lpq command = [%s]\n",
sharename, current_printif->type, lpq_command));
@@ -1426,6 +1432,11 @@ static void print_queue_update(int snum, BOOL force)
sent. */
pdb = get_print_db_byname(sharename);
+ if (!pdb) {
+ SAFE_FREE(buffer);
+ return;
+ }
+
snprintf(key, sizeof(key), "MSG_PENDING/%s", sharename);
if ( !tdb_store_uint32( pdb->tdb, key, time(NULL) ) ) {
@@ -1731,6 +1742,10 @@ static BOOL remove_from_jobs_changed(const char* sharename, uint32 jobid)
BOOL ret = False;
BOOL gotlock = False;
+ if (!pdb) {
+ return False;
+ }
+
ZERO_STRUCT(data);
key = string_tdb_data("INFO/jobs_changed");
@@ -2057,11 +2072,14 @@ static int get_queue_status(const char* sharename, print_status_struct *status)
struct tdb_print_db *pdb = get_print_db_byname(sharename);
int len;
+ if (status) {
+ ZERO_STRUCTP(status);
+ }
+
if (!pdb)
return 0;
if (status) {
- ZERO_STRUCTP(status);
fstr_sprintf(keystr, "STATUS/%s", sharename);
data = tdb_fetch(pdb->tdb, string_tdb_data(keystr));
if (data.dptr) {
diff --git a/source/rpc_server/srv_netlog_nt.c b/source/rpc_server/srv_netlog_nt.c
index 0af8b14fe21..78ff669d075 100644
--- a/source/rpc_server/srv_netlog_nt.c
+++ b/source/rpc_server/srv_netlog_nt.c
@@ -606,6 +606,9 @@ NTSTATUS _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *
if (!(p->dc.authenticated && deal_with_creds(p->dc.sess_key, &p->dc.clnt_cred, &q_u->sam_id.client.cred, &srv_cred)))
return NT_STATUS_INVALID_HANDLE;
+ r_u->buffer_creds = 1; /* yes, we have valid server credentials */
+ memcpy(&r_u->srv_creds, &srv_cred, sizeof(r_u->srv_creds));
+
/* find the username */
switch (q_u->sam_id.logon_level) {
@@ -713,6 +716,15 @@ NTSTATUS _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *
/* Check account and password */
if (!NT_STATUS_IS_OK(status)) {
+ /* If we don't know what this domain is, we need to
+ indicate that we are not authoritative. This
+ allows the client to decide if it needs to try
+ a local user. Fix by jpjanosi@us.ibm.com, #2976 */
+ if ( NT_STATUS_EQUAL(status, NT_STATUS_NO_SUCH_USER)
+ && !strequal(nt_domain, get_global_sam_name())
+ && !is_trusted_domain(nt_domain) )
+ r_u->auth_resp = 0; /* We are not authoritative */
+
free_server_info(&server_info);
return status;
}
@@ -723,9 +735,6 @@ NTSTATUS _net_sam_logon(pipes_struct *p, NET_Q_SAM_LOGON *q_u, NET_R_SAM_LOGON *
reseed_client_creds(&p->dc.clnt_cred, &q_u->sam_id.client.cred);
memcpy(&p->dc.srv_cred, &p->dc.clnt_cred, sizeof(p->dc.clnt_cred));
- r_u->buffer_creds = 1; /* yes, we have valid server credentials */
- memcpy(&r_u->srv_creds, &srv_cred, sizeof(r_u->srv_creds));
-
if (server_info->guest) {
/* We don't like guest domain logons... */
DEBUG(5,("_net_sam_logon: Attempted domain logon as GUEST denied.\n"));
diff --git a/source/rpc_server/srv_samr_util.c b/source/rpc_server/srv_samr_util.c
index 66cf1cc46dc..24869d5d2bd 100644
--- a/source/rpc_server/srv_samr_util.c
+++ b/source/rpc_server/srv_samr_util.c
@@ -286,7 +286,25 @@ void copy_id21_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_21 *from)
DEBUG(10,("INFO_21 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange));
if (from->passmustchange==PASS_MUST_CHANGE_AT_NEXT_LOGON) {
- pdb_set_pass_must_change_time(to,0, PDB_CHANGED);
+ pdb_set_pass_must_change_time(to,0, PDB_CHANGED);
+ } else {
+ uint32 expire;
+ time_t new_time;
+ if (pdb_get_pass_must_change_time(to) == 0) {
+ if (!account_policy_get(AP_MAX_PASSWORD_AGE, &expire)
+ || expire == (uint32)-1) {
+ new_time = get_time_t_max();
+ } else {
+ time_t old_time = pdb_get_pass_last_set_time(to);
+ new_time = old_time + expire;
+ if ((new_time) < time(0)) {
+ new_time = time(0) + expire;
+ }
+ }
+ if (!pdb_set_pass_must_change_time (to, new_time, PDB_CHANGED)) {
+ DEBUG (0, ("pdb_set_pass_must_change_time failed!\n"));
+ }
+ }
}
DEBUG(10,("INFO_21 PADDING_2: %02X\n",from->padding2));
@@ -490,7 +508,6 @@ void copy_id23_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_23 *from)
DEBUG(15,("INFO_23 LOGON_HRS.HOURS: %s -> %s\n",pdb_get_hours(to),from->logon_hrs.hours));
/* Fix me: only update if it changes --metze */
pdb_set_hours(to, from->logon_hrs.hours, PDB_CHANGED);
-
}
if (from->fields_present & ACCT_BAD_PWD_COUNT) {
@@ -510,6 +527,24 @@ void copy_id23_to_sam_passwd(SAM_ACCOUNT *to, SAM_USER_INFO_23 *from)
DEBUG(10,("INFO_23 PASS_MUST_CHANGE_AT_NEXT_LOGON: %02X\n",from->passmustchange));
if (from->passmustchange==PASS_MUST_CHANGE_AT_NEXT_LOGON) {
pdb_set_pass_must_change_time(to,0, PDB_CHANGED);
+ } else {
+ uint32 expire;
+ time_t new_time;
+ if (pdb_get_pass_must_change_time(to) == 0) {
+ if (!account_policy_get(AP_MAX_PASSWORD_AGE, &expire)
+ || expire == (uint32)-1) {
+ new_time = get_time_t_max();
+ } else {
+ time_t old_time = pdb_get_pass_last_set_time(to);
+ new_time = old_time + expire;
+ if ((new_time) < time(0)) {
+ new_time = time(0) + expire;
+ }
+ }
+ if (!pdb_set_pass_must_change_time (to, new_time, PDB_CHANGED)) {
+ DEBUG (0, ("pdb_set_pass_must_change_time failed!\n"));
+ }
+ }
}
DEBUG(10,("INFO_23 PADDING_2: %02X\n",from->padding2));
diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c
index 692dacf1599..5391ac5f41a 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -8040,13 +8040,14 @@ WERROR _spoolss_enumprinterdata(pipes_struct *p, SPOOL_Q_ENUMPRINTERDATA *q_u, S
/* data - counted in bytes */
*out_max_data_len = in_data_len;
- if ( (*data_out = (uint8 *)TALLOC_ZERO(p->mem_ctx, in_data_len*sizeof(uint8))) == NULL)
+ if ( in_data_len && (*data_out = (uint8 *)TALLOC_ZERO(p->mem_ctx, in_data_len*sizeof(uint8))) == NULL)
{
result = WERR_NOMEM;
goto done;
}
data_len = regval_size(val);
- memcpy( *data_out, regval_data_p(val), data_len );
+ if ( *data_out )
+ memcpy( *data_out, regval_data_p(val), data_len );
*out_data_len = data_len;
}
diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c
index e1462c01036..6cebff61ed4 100644
--- a/source/smbd/trans2.c
+++ b/source/smbd/trans2.c
@@ -878,8 +878,9 @@ static int call_trans2open(connection_struct *conn, char *inbuf, char *outbuf, i
SSVAL(params,2,open_attr);
put_dos_date2(params,4, mtime);
SIVAL(params,8, (uint32)size);
- SSVAL(params,12,open_ofun);
- SSVAL(params,16,0); /* Padding. */
+ SSVAL(params,12,deny_mode);
+ SSVAL(params,14,0); /* open_type - file or directory. */
+ SSVAL(params,16,0); /* open_state - only valid for IPC device. */
if (oplock_request && lp_fake_oplocks(SNUM(conn))) {
smb_action |= EXTENDED_OPLOCK_GRANTED;
diff --git a/source/web/swat.c b/source/web/swat.c
index 14889e35aab..43dacb2945e 100644
--- a/source/web/swat.c
+++ b/source/web/swat.c
@@ -188,12 +188,12 @@ static const char* get_parm_translated(
if(strcmp(pLabel, pTranslated) != 0)
{
pstr_sprintf(output,
- "<A HREF=\"/swat/help/smb.conf.5.html#%s\" target=\"docs\"> %s</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s <br><span class=\"i18n_translated_parm\">%s</span>",
+ "<A HREF=\"/swat/help/manpages/smb.conf.5.html#%s\" target=\"docs\"> %s</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s <br><span class=\"i18n_translated_parm\">%s</span>",
pAnchor, pHelp, pLabel, pTranslated);
return output;
}
pstr_sprintf(output,
- "<A HREF=\"/swat/help/smb.conf.5.html#%s\" target=\"docs\"> %s</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s",
+ "<A HREF=\"/swat/help/manpages/smb.conf.5.html#%s\" target=\"docs\"> %s</A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %s",
pAnchor, pHelp, pLabel);
return output;
}
diff --git a/swat/help/welcome.html b/swat/help/welcome.html
index 3a6677cb5f9..bf045806fe3 100644
--- a/swat/help/welcome.html
+++ b/swat/help/welcome.html
@@ -54,9 +54,9 @@ Please choose a configuration action using one of the above buttons
<li><b>Books</b>
<ul>
<li><a href="/swat/help/using_samba/toc.html" target="docs">Using Samba, 2ed.</a> - by Jay Ts, Robert Eckstein, and David Collier-Brown
- <li><a href="/swat/help/Samba3-HOWTO/">The Official Samba HOWTO and Reference Guide</a>
- <li><a href="/swat/help/Samba3-ByExample/">Samba 3 by Example</a>
- <li><a href="/swat/help/Samba3-Developers-Guide/">The Samba Developer Guide</a>
+ <li><a href="/swat/help/Samba3-HOWTO/" target="docs">The Official Samba HOWTO and Reference Guide</a>
+ <li><a href="/swat/help/Samba3-ByExample/" target="docs">Samba 3 by Example</a>
+ <li><a href="/swat/help/Samba3-Developers-Guide/" target="docs">The Samba Developer Guide</a>
</ul>
</ul>