[SCM] Samba Shared Repository - branch v3-3-test updated

Karolin Seeger kseeger at samba.org
Wed Jul 27 11:41:32 MDT 2011


The branch, v3-3-test has been updated
       via  02621d4 WHATSNEW: Start release notes for 3.3.17.
       via  f6469f2 VERSION: Bump version number up to 3.6.17.
       via  cb05204 s3-swat: Fix typo.
       via  6b7a7d8 s3 swat: Create random nonce in CGI mode
       via  e16316d s3 swat: Add time component to XSRF token
       via  5f9d559 s3 swat: Add XSRF protection to printer page
       via  37fc575 s3 swat: Add XSRF protection to password page
       via  d7056ec s3 swat: Add XSRF protection to shares page
       via  43bb2d4 s3 swat: Add XSRF protection to globals page
       via  5aae531 s3 swat: Add XSRF protection to wizard page
       via  8aee102 s3 swat: Add XSRF protection to wizard_params page
       via  6af465a s3 swat: Add XSRF protection to viewconfig page
       via  ad92cde s3 swat: Add XSRF protection to status page
       via  e90a2cc s3 swat: Add support for anti-XSRF token
       via  0f96d0f s3 swat: Allow getting the user's HTTP auth password
       via  c93a3b6 s3 swat: Fix possible XSS attack (bug #8289)
       via  c5e163d WAHTSNEW: Prepare release notes for 3.3.16.
       via  351ff10 VERSION: Bump version number up to 3.3.16.
      from  d9c0ace s3:nmbd_packets: return the used number of sockets in create_listen_fdset() (bug #8276)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 02621d4e819d4ea42bda5e8f6dbaae638f1b9f5c
Author: Karolin Seeger <kseeger at samba.org>
Date:   Tue Jul 26 20:51:52 2011 +0200

    WHATSNEW: Start release notes for 3.3.17.
    
    Karolin
    (cherry picked from commit 0fb8c85001ee0657be20aae81716d9c309420652)

commit f6469f23c9b1aee8d020b0be82ab843b89e3c8c9
Author: Karolin Seeger <kseeger at samba.org>
Date:   Tue Jul 26 20:49:58 2011 +0200

    VERSION: Bump version number up to 3.6.17.
    
    Karolin
    (cherry picked from commit a646b2e5ad0e19f8506bff3ff8b0ce2e3bcbf061)

commit cb05204c531826fd2bc5e225bd35759de7bcd59b
Author: Karolin Seeger <kseeger at samba.org>
Date:   Sun Jul 24 21:09:38 2011 +0200

    s3-swat: Fix typo.
    
    Thanks to Simo for reporting!
    
    Karolin
    (cherry picked from commit f571f362deaa5bfbdb22c3a7d8409bab9b6c8d82)

commit 6b7a7d865bdb8e61537ba4795e24facee2df240e
Author: Kai Blin <kai at samba.org>
Date:   Tue Jul 12 08:08:24 2011 +0200

    s3 swat: Create random nonce in CGI mode
    
    In CGI mode, we don't get access to the user's password, which would
    reduce the hash used so far to parameters an attacker can easily guess.
    To work around this, read the nonce from secrets.tdb or generate one if
    it's not there.
    Also populate the C_user field so we can use that for token creation.
    
    Signed-off-by: Kai Blin <kai at samba.org>
    
    The last 12 patches address bug #8290 (CSRF vulnerability in SWAT).
    This addresses CVE-2011-2522 (Cross-Site Request Forgery in SWAT).
    (cherry picked from commit 3973cfa50024983618a44ffdb9f756b642b85be7)

commit e16316d08e2b0e3d857fd6d72abdde2c19eaf5c9
Author: Kai Blin <kai at samba.org>
Date:   Sat Jul 9 09:52:07 2011 +0200

    s3 swat: Add time component to XSRF token
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 11e281228f334bf3d384df5655136f0b4b4068aa)

commit 5f9d5599b47a9f1a8319e8b87220ae53a06926d4
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:06:13 2011 +0200

    s3 swat: Add XSRF protection to printer page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 407ae61fbfc8ee1643a4db8ea9b104f031b32e0f)

commit 37fc575e5eebf83d97fd08531d0b600f6f8f022b
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:05:38 2011 +0200

    s3 swat: Add XSRF protection to password page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 4850456845d2da5e3451716a5ad4ca0ef034e01f)

commit d7056ec2d31ede5f03c1dc0da09a6c26a0f07b77
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:04:48 2011 +0200

    s3 swat: Add XSRF protection to shares page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit ef457a20422cfa8231e25b539d2cd87f299686b9)

commit 43bb2d4e9f162f2aaa4ae56dba27170fe1b8e9ae
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:04:12 2011 +0200

    s3 swat: Add XSRF protection to globals page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 8fb3064eeaa3640af6c8b91aa5859d8bfb6d0888)

commit 5aae5319d34a9bf8c9f1f28883ac77a053b9a217
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:03:44 2011 +0200

    s3 swat: Add XSRF protection to wizard page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit eb22fd73060534700d514ec295985549131c7569)

commit 8aee1024450155fd37b776bfa0bbfef063638590
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:03:15 2011 +0200

    s3 swat: Add XSRF protection to wizard_params page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 94f8482607a175c44436fae456fbda3624629982)

commit 6af465aa66ac9930fdf6676bdb0e5e1c7914f1fc
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 15:02:53 2011 +0200

    s3 swat: Add XSRF protection to viewconfig page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit ba996f0ae87f6bf4f19a4918e44dbd6d44a96561)

commit ad92cdeaea5e47852554567c4587bbe55df88507
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 12:58:53 2011 +0200

    s3 swat: Add XSRF protection to status page
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 3f38cf42facc38c19e0448cbae3078b9606b08e4)

commit e90a2cc9ea8d040b10316c6ba90fe511a6c8a898
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 12:57:43 2011 +0200

    s3 swat: Add support for anti-XSRF token
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit 3806fec53dcf3b6e5c3fd71917f9d67d47c65e32)

commit 0f96d0f8eeade204b1e53d3c6124400b76e24017
Author: Kai Blin <kai at samba.org>
Date:   Fri Jul 8 12:56:21 2011 +0200

    s3 swat: Allow getting the user's HTTP auth password
    
    Signed-off-by: Kai Blin <kai at samba.org>
    (cherry picked from commit b610e0cee563465c6b970647b215f8ae4d0c6599)

commit c93a3b6797e413459e4fd0922fcb55a655500b90
Author: Kai Blin <kai at samba.org>
Date:   Thu Jul 7 10:03:33 2011 +0200

    s3 swat: Fix possible XSS attack (bug #8289)
    
    Nobuhiro Tsuji of NTT DATA SECURITY CORPORATION reported a possible XSS attack
    against SWAT, the Samba Web Administration Tool. The attack uses reflection to
    insert arbitrary content into the "change password" page.
    
    This patch fixes the reflection issue by not printing user-specified content on
    the website anymore.
    
    Signed-off-by: Kai Blin <kai at samba.org>
    
    CVE-2011-2694.
    (cherry picked from commit d401ccaedaec09ad6900ec24ecaf205bed3e3ac1)

commit c5e163dd21646883ab83b4b413877f5ec06bd216
Author: Karolin Seeger <kseeger at samba.org>
Date:   Sun Jul 24 20:36:30 2011 +0200

    WAHTSNEW: Prepare release notes for 3.3.16.
    
    Karolin
    (cherry picked from commit 5d2d4fbf5bcf6aa1c1d994adaed22dec3ba09b9c)

commit 351ff10e42cb43f283c9287472d2f8231f08da2a
Author: Karolin Seeger <kseeger at samba.org>
Date:   Sun Jul 24 20:25:08 2011 +0200

    VERSION: Bump version number up to 3.3.16.
    
    Karolin
    (cherry picked from commit ad64256e19bef0b4441bc660faf524150e12bdf8)

-----------------------------------------------------------------------

Summary of changes:
 WHATSNEW.txt            |  100 ++++++++++++++++++++++++++-
 source/VERSION          |    2 +-
 source/web/cgi.c        |   27 +++++++-
 source/web/statuspage.c |    7 ++
 source/web/swat.c       |  174 ++++++++++++++++++++++++++++++++++++++--------
 source/web/swat_proto.h |    6 ++
 6 files changed, 281 insertions(+), 35 deletions(-)


Changeset truncated at 500 lines:

diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 08a606b..6c42542 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,4 +1,100 @@
                    ==============================
+                   Release Notes for Samba 3.3.17
+		           , 2011
+                   ==============================
+
+
+This is a security release in order to address
+
+
+Changes since 3.3.16
+--------------------
+
+
+o   
+
+######################################################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored.  All bug reports should
+be filed under the Samba 3.3 product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
+
+                   ==============================
+                   Release Notes for Samba 3.3.16
+		           July 26, 2011
+                   ==============================
+
+
+This is a security release in order to address
+CVE-2011-2522 (Cross-Site Request Forgery in SWAT) and
+CVE-2011-2694 (Cross-Site Scripting vulnerability in SWAT).
+
+
+o  CVE-2011-2522:
+   The Samba Web Administration Tool (SWAT) in Samba versions
+   3.0.x to 3.5.9 are affected by a cross-site request forgery.
+
+
+o  CVE-2011-2694:
+   The Samba Web Administration Tool (SWAT) in Samba versions
+   3.0.x to 3.5.9 are affected by a cross-site scripting
+   vulnerability.
+
+Please note that SWAT must be enabled in order for these
+vulnerabilities to be exploitable. By default, SWAT
+is *not* enabled on a Samba install.
+
+
+Changes since 3.3.15
+--------------------
+
+
+o   Kai Blin <kai at samba.org>
+    * BUG 8289: SWAT contains a cross-site scripting vulnerability.
+    * BUG 8290: CSRF vulnerability in SWAT.
+
+
+######################################################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored.  All bug reports should
+be filed under the Samba 3.3 product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+----------------------------------------------------------------------
+
+
+                   ==============================
                    Release Notes for Samba 3.3.15
 		         February 28, 2011
                    ==============================
@@ -44,8 +140,8 @@ database (https://bugzilla.samba.org/).
 ======================================================================
 
 
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
+
 
                    ==============================
                    Release Notes for Samba 3.3.14
diff --git a/source/VERSION b/source/VERSION
index 5642930..4f4ae56 100644
--- a/source/VERSION
+++ b/source/VERSION
@@ -25,7 +25,7 @@
 ########################################################
 SAMBA_VERSION_MAJOR=3
 SAMBA_VERSION_MINOR=3
-SAMBA_VERSION_RELEASE=15
+SAMBA_VERSION_RELEASE=17
 
 ########################################################
 # Bug fix releases use a letter for the patch revision #
diff --git a/source/web/cgi.c b/source/web/cgi.c
index 72aa11c..890ac8e 100644
--- a/source/web/cgi.c
+++ b/source/web/cgi.c
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "web/swat_proto.h"
+#include "secrets.h"
 
 #define MAX_VARIABLES 10000
 
@@ -42,6 +43,7 @@ static char *query_string;
 static const char *baseurl;
 static char *pathinfo;
 static char *C_user;
+static char *C_pass;
 static bool inetd_server;
 static bool got_request;
 
@@ -320,7 +322,22 @@ static void cgi_web_auth(void)
 		exit(0);
 	}
 
-	setuid(0);
+	C_user = SMB_STRDUP(user);
+
+	if (!setuid(0)) {
+		C_pass = secrets_fetch_generic("root", "SWAT");
+		if (C_pass == NULL) {
+			char *tmp_pass = NULL;
+			tmp_pass = generate_random_str(16);
+			if (tmp_pass == NULL) {
+				printf("%sFailed to create random nonce for "
+				       "SWAT session\n<br>%s\n", head, tail);
+				exit(0);
+			}
+			secrets_store_generic("root", "SWAT", tmp_pass);
+			C_pass = SMB_STRDUP(tmp_pass);
+		}
+	}
 	setuid(pwd->pw_uid);
 	if (geteuid() != pwd->pw_uid || getuid() != pwd->pw_uid) {
 		printf("%sFailed to become user %s - uid=%d/%d<br>%s\n", 
@@ -388,6 +405,7 @@ static bool cgi_handle_authorization(char *line)
 			
 			/* Save the users name */
 			C_user = SMB_STRDUP(user);
+			C_pass = SMB_STRDUP(user_pass);
 			TALLOC_FREE(pass);
 			return True;
 		}
@@ -422,6 +440,13 @@ char *cgi_user_name(void)
         return(C_user);
 }
 
+/***************************************************************************
+return a ptr to the users password
+  ***************************************************************************/
+char *cgi_user_pass(void)
+{
+        return(C_pass);
+}
 
 /***************************************************************************
 handle a file download
diff --git a/source/web/statuspage.c b/source/web/statuspage.c
index 8070ae7..fe545e4 100644
--- a/source/web/statuspage.c
+++ b/source/web/statuspage.c
@@ -247,9 +247,14 @@ void status_page(void)
 	int nr_running=0;
 	bool waitup = False;
 	TALLOC_CTX *ctx = talloc_stackframe();
+	const char form_name[] = "status";
 
 	smbd_pid = pid_to_procid(pidfile_pid("smbd"));
 
+	if (!verify_xsrf_token(form_name)) {
+		goto output_page;
+	}
+
 	if (cgi_variable("smbd_restart") || cgi_variable("all_restart")) {
 		stop_smbd();
 		start_smbd();
@@ -326,9 +331,11 @@ void status_page(void)
 
 	initPid2Machine ();
 
+output_page:
 	printf("<H2>%s</H2>\n", _("Server Status"));
 
 	printf("<FORM method=post>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), form_name);
 
 	if (!autorefresh) {
 		printf("<input type=submit value=\"%s\" name=\"autorefresh\">\n", _("Auto Refresh"));
diff --git a/source/web/swat.c b/source/web/swat.c
index 9c7294a..f21bcaa 100644
--- a/source/web/swat.c
+++ b/source/web/swat.c
@@ -50,6 +50,9 @@ static int iNumNonAutoPrintServices = 0;
 #define DISABLE_USER_FLAG "disable_user_flag"
 #define ENABLE_USER_FLAG "enable_user_flag"
 #define RHOST "remote_host"
+#define XSRF_TOKEN "xsrf"
+#define XSRF_TIME "xsrf_time"
+#define XSRF_TIMEOUT 300
 
 #define _(x) lang_msg_rotate(talloc_tos(),x)
 
@@ -138,6 +141,76 @@ static char *make_parm_name(const char *label)
 	return parmname;
 }
 
+void get_xsrf_token(const char *username, const char *pass,
+		    const char *formname, time_t xsrf_time, char token_str[33])
+{
+	struct MD5Context md5_ctx;
+	uint8_t token[16];
+	int i;
+
+	token_str[0] = '\0';
+	ZERO_STRUCT(md5_ctx);
+	MD5Init(&md5_ctx);
+
+	MD5Update(&md5_ctx, (uint8_t *)formname, strlen(formname));
+	MD5Update(&md5_ctx, (uint8_t *)&xsrf_time, sizeof(time_t));
+	if (username != NULL) {
+		MD5Update(&md5_ctx, (uint8_t *)username, strlen(username));
+	}
+	if (pass != NULL) {
+		MD5Update(&md5_ctx, (uint8_t *)pass, strlen(pass));
+	}
+
+	MD5Final(token, &md5_ctx);
+
+	for(i = 0; i < sizeof(token); i++) {
+		char tmp[3];
+
+		snprintf(tmp, sizeof(tmp), "%02x", token[i]);
+		strncat(token_str, tmp, sizeof(tmp));
+	}
+}
+
+void print_xsrf_token(const char *username, const char *pass,
+		      const char *formname)
+{
+	char token[33];
+	time_t xsrf_time = time(NULL);
+
+	get_xsrf_token(username, pass, formname, xsrf_time, token);
+	printf("<input type=\"hidden\" name=\"%s\" value=\"%s\">\n",
+	       XSRF_TOKEN, token);
+	printf("<input type=\"hidden\" name=\"%s\" value=\"%lld\">\n",
+	       XSRF_TIME, (long long int)xsrf_time);
+}
+
+bool verify_xsrf_token(const char *formname)
+{
+	char expected[33];
+	const char *username = cgi_user_name();
+	const char *pass = cgi_user_pass();
+	const char *token = cgi_variable_nonull(XSRF_TOKEN);
+	const char *time_str = cgi_variable_nonull(XSRF_TIME);
+	time_t xsrf_time = 0;
+	time_t now = time(NULL);
+
+	if (sizeof(time_t) == sizeof(int)) {
+		xsrf_time = atoi(time_str);
+	} else if (sizeof(time_t) == sizeof(long)) {
+		xsrf_time = atol(time_str);
+	} else if (sizeof(time_t) == sizeof(long long)) {
+		xsrf_time = atoll(time_str);
+	}
+
+	if (abs(now - xsrf_time) > XSRF_TIMEOUT) {
+		return false;
+	}
+
+	get_xsrf_token(username, pass, formname, xsrf_time, expected);
+	return (strncmp(expected, token, sizeof(expected)) == 0);
+}
+
+
 /****************************************************************************
   include a lump of html in a page 
 ****************************************************************************/
@@ -610,13 +683,20 @@ static void welcome_page(void)
 static void viewconfig_page(void)
 {
 	int full_view=0;
+	const char form_name[] = "viewconfig";
+
+	if (!verify_xsrf_token(form_name)) {
+		goto output_page;
+	}
 
 	if (cgi_variable("full_view")) {
 		full_view = 1;
 	}
 
+output_page:
 	printf("<H2>%s</H2>\n", _("Current Config"));
 	printf("<form method=post>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), form_name);
 
 	if (full_view) {
 		printf("<input type=submit name=\"normal_view\" value=\"%s\">\n", _("Normal View"));
@@ -636,18 +716,25 @@ static void viewconfig_page(void)
 static void wizard_params_page(void)
 {
 	unsigned int parm_filter = FLAG_WIZARD;
+	const char form_name[] = "wizard_params";
 
 	/* Here we first set and commit all the parameters that were selected
  	   in the previous screen. */
 
 	printf("<H2>%s</H2>\n", _("Wizard Parameter Edit Page"));
 
+	if (!verify_xsrf_token(form_name)) {
+		goto output_page;
+	}
+
 	if (cgi_variable("Commit")) {
 		commit_parameters(GLOBAL_SECTION_SNUM);
 		save_reload(0);
 	}
 
+output_page:
 	printf("<form name=\"swatform\" method=post action=wizard_params>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), form_name);
 
 	if (have_write_access) {
 		printf("<input type=submit name=\"Commit\" value=\"Commit Changes\">\n");
@@ -683,6 +770,11 @@ static void wizard_page(void)
 	int have_home = -1;
 	int HomeExpo = 0;
 	int SerType = 0;
+	const char form_name[] = "wizard";
+
+	if (!verify_xsrf_token(form_name)) {
+		goto output_page;
+	}
 
 	if (cgi_variable("Rewrite")) {
 		(void) rewritecfg_file();
@@ -773,10 +865,12 @@ static void wizard_page(void)
 		winstype = 3;
 
 	role = lp_server_role();
-	
+
+output_page:
 	/* Here we go ... */
 	printf("<H2>%s</H2>\n", _("Samba Configuration Wizard"));
 	printf("<form method=post action=wizard>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), form_name);
 
 	if (have_write_access) {
 		printf("%s\n", _("The \"Rewrite smb.conf file\" button will clear the smb.conf file of all default values and of comments."));
@@ -845,9 +939,14 @@ static void globals_page(void)
 {
 	unsigned int parm_filter = FLAG_BASIC;
 	int mode = 0;
+	const char form_name[] = "globals";
 
 	printf("<H2>%s</H2>\n", _("Global Parameters"));
 
+	if (!verify_xsrf_token(form_name)) {
+		goto output_page;
+	}
+
 	if (cgi_variable("Commit")) {
 		commit_parameters(GLOBAL_SECTION_SNUM);
 		save_reload(0);
@@ -860,7 +959,9 @@ static void globals_page(void)
 	if ( cgi_variable("AdvMode"))
 		mode = 1;
 
+output_page:
 	printf("<form name=\"swatform\" method=post action=globals>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), form_name);
 
 	ViewModeBoxes( mode );
 	switch ( mode ) {
@@ -900,11 +1001,17 @@ static void shares_page(void)
 	int mode = 0;
 	unsigned int parm_filter = FLAG_BASIC;
 	size_t converted_size;
+	const char form_name[] = "shares";
+
+	printf("<H2>%s</H2>\n", _("Share Parameters"));
+
+	if (!verify_xsrf_token(form_name)) {
+		goto output_page;
+	}
 
 	if (share)
 		snum = lp_servicenumber(share);
 
-	printf("<H2>%s</H2>\n", _("Share Parameters"));
 
 	if (cgi_variable("Commit") && snum >= 0) {
 		commit_parameters(snum);
@@ -930,10 +1037,6 @@ static void shares_page(void)
 		}
 	}
 
-	printf("<FORM name=\"swatform\" method=post>\n");
-
-	printf("<table>\n");
-
 	if ( cgi_variable("ViewMode") )
 		mode = atoi(cgi_variable_nonull("ViewMode"));
 	if ( cgi_variable("BasicMode"))
@@ -941,6 +1044,12 @@ static void shares_page(void)
 	if ( cgi_variable("AdvMode"))
 		mode = 1;
 
+output_page:
+	printf("<FORM name=\"swatform\" method=post>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), form_name);
+
+	printf("<table>\n");
+
 	ViewModeBoxes( mode );
 	switch ( mode ) {
 		case 0:
@@ -1120,11 +1229,9 @@ static void chg_passwd(void)
 	if(cgi_variable(CHG_S_PASSWD_FLAG)) {
 		printf("<p>");
 		if (rslt == True) {
-			printf(_(" The passwd for '%s' has been changed."), cgi_variable_nonull(SWAT_USER));
-			printf("\n");
+			printf("%s\n", _(" The passwd has been changed."));
 		} else {
-			printf(_(" The passwd for '%s' has NOT been changed."), cgi_variable_nonull(SWAT_USER));
-			printf("\n");
+			printf("%s\n", _(" The passwd has NOT been changed."));
 		}
 	}
 	
@@ -1137,20 +1244,15 @@ static void chg_passwd(void)
 static void passwd_page(void)
 {
 	const char *new_name = cgi_user_name();
-
-	/* 
-	 * After the first time through here be nice. If the user
-	 * changed the User box text to another users name, remember it.
-	 */
-	if (cgi_variable(SWAT_USER)) {
-		new_name = cgi_variable_nonull(SWAT_USER);
-	} 
+	const char passwd_form[] = "passwd";
+	const char rpasswd_form[] = "rpasswd";
 
 	if (!new_name) new_name = "";
 
 	printf("<H2>%s</H2>\n", _("Server Password Management"));
 
 	printf("<FORM name=\"swatform\" method=post>\n");
+	print_xsrf_token(cgi_user_name(), cgi_user_pass(), passwd_form);
 
 	printf("<table>\n");
 
@@ -1190,14 +1292,16 @@ static void passwd_page(void)
 	 * Do some work if change, add, disable or enable was
 	 * requested. It could be this is the first time through this
 	 * code, so there isn't anything to do.  */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list