View Issue Details

This bug affects 3 person(s).
 32
IDProjectCategoryView StatusLast Update
19347Bug reportsPluginspublic2024-02-05 11:32
Reportergreiling Assigned ToDenisChenu  
PrioritynoneSeveritypartial_block 
Status closedResolutionfixed 
Product Version6.4.x 
Summary19347: No generation of new user within first LDAP login
Description

Following checks are active marked in Plugins AuthLDAP configuration:

Automatically create user if it exists in LDAP server
Grant survey creation permission to automatically created users

works fine at Version 5.6.50+240109

Steps To Reproduce

Steps to reproduce

Try to login with a valid LDAP user not in local limesurvey database

Expected result

new user generated, login successful

Actual result

500: Interner Serverfehler Call to undefined method class@anonymous::get()

TagsNo tags attached.
Bug heat32
Complete LimeSurvey version number (& build)LimeSurvey Community Edition Version 6.4.1+240108
I will donate to the project if issue is resolvedNo
BrowserFF 121.0.1
Database type & versionMariaDB 10.5.21-MariaDB-0+deb11u1
Server OS (if known)
Webserver software & version (if known)
PHP VersionPHP 8.2.13 (cli)

Relationships

has duplicate 19379 closedDenisChenu New user via LDAP not created 

Users monitoring this issue

There are no users monitoring this issue.

Activities

girish

girish

2024-01-15 14:04

reporter   ~79165

Hit the same issue. The error first started with 6.4.0+231218 . This is using PHP 8.1 + MySQL 8.0.31

DenisChenu

DenisChenu

2024-01-16 09:41

developer   ~79172

Can you enable debug = 2 in application/config/config.php and try again, please? Paste the complete error message here.

greiling

greiling

2024-01-16 10:09

reporter   ~79174

Error

Call to undefined method class@anonymous::get()

/var/www/temp/limesurvey/application/core/plugins/AuthLDAP/AuthLDAP.php(297)

285 $oEvent->set('errorMessageTitle', gT("Failed to add user"));
286 $oEvent->set('errorMessageBody', gT("The email address is not valid."));
287 return null;
288 }
289 $new_pass = createPassword();
290 // If user is being auto created we set parent ID to 1 (admin user)
291 if (isset(Yii::app()->session['loginID'])) {
292 $parentID = Yii::app()->session['loginID'];
293 } else {
294 $parentID = 1;
295 }
296 $status = true;
297 $preCollectedUserArray = $oEvent->get('preCollectedUserArray', []);
298 if (!empty($preCollectedUserArray)) {
299 if (!empty($preCollectedUserArray['status'])) {
300 $status = $preCollectedUserArray['status'];
301 }
302 }
303 $iNewUID = User::insertUser($new_user, $new_pass, $new_full_name, $parentID, $new_email, null, $status);
304 if (!$iNewUID) {
305 $oEvent->set('errorCode', self::ERROR_ALREADY_EXISTING_USER);
306 $oEvent->set('errorMessageTitle', '');
307 $oEvent->set('errorMessageBody', gT("Failed to add user"));
308 return null;
309 }

Stack Trace
#0

/var/www/temp/limesurvey/application/core/plugins/AuthLDAP/AuthLDAP.php(579): AuthLDAP->_createNewUser()

574 }
575 public function __toString() {
576 return json_encode($this->warnings);
577 }
578 };
579 if (($iNewUID = $this->_createNewUser($dummyEvent, $username, $password)) && $this->get('automaticsurveycreation', null, null, false)) {
580 Permission::model()->setGlobalPermission($iNewUID, 'surveys', array('create_p'));
581 }
582 $user = $this->api->getUserByName($username);
583 if ($user === null) {
584 $this->setAuthFailure(self::ERROR_USERNAME_INVALID, gT('Credentials are valid but we failed to create a user'));

#1
unknown(0): AuthLDAP->newUserSession()
#2

/var/www/temp/limesurvey/application/libraries/PluginManager/PluginManager.php(269): call_user_func()

264 if (
265 !$event->isStopped()
266 && (empty($target) || in_array(get_class($subscription[0]), $target))
267 ) {
268 $subscription[0]->setEvent($event);
269 call_user_func($subscription);
270 }
271 }
272 }
273
274 return $event;

#3

/var/www/temp/limesurvey/application/core/LSUserIdentity.php(78): LimeSurvey\PluginManager\PluginManager->dispatchEvent()

73 throw new CHttpException(403, gT("You do not have permission to access this page."));
74 }
75 // Delegate actual authentication to plugin
76 $authEvent = new PluginEvent('newUserSession', $this); // TODO: rename the plugin function authenticate()
77 $authEvent->set('identity', $this);
78 App()->getPluginManager()->dispatchEvent($authEvent);
79 $pluginResult = $authEvent->get('result');
80 if ($pluginResult instanceof LSAuthResult) {
81 $result = $pluginResult;
82 } else {
83 $result->setError(self::ERROR_UNKNOWN_IDENTITY);

#4

/var/www/temp/limesurvey/application/controllers/admin/Authentication.php(167): LSUserIdentity->authenticate()

162
163 // Now authenticate
164 // This call LSUserIdentity::authenticate() (application/core/LSUserIdentity.php))
165 // which will call the plugin function newUserSession() (eg: Authdb::newUserSession() )
166 // TODO: for sake of clarity, the plugin function should be renamed to authenticate().
167 if ($identity->authenticate()) {
168 FailedLoginAttempt::model()->deleteAttempts(FailedLoginAttempt::TYPE_LOGIN);
169 App()->user->setState('plugin', $authMethod);
170
171 Yii::app()->session['just_logged_in'] = true;
172 Yii::app()->session['loginsummary'] = self::getSummary();

#5

/var/www/temp/limesurvey/application/controllers/admin/Authentication.php(51): Authentication::prepareLogin()

46 }
47 // The page should be shown only for non logged in users
48 $this->redirectIfLoggedIn();
49
50 // Result can be success, fail or data for template
51 $result = self::prepareLogin();
52
53 $isAjax = isset($_GET['ajax']) && $_GET['ajax'] == 1;
54 $succeeded = isset($result[0]) && $result[0] == 'success';
55 $failed = isset($result[0]) && $result[0] == 'failed';
56

#6
unknown(0): Authentication->index()
#7

/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/web/actions/CAction.php(115): ReflectionMethod->invokeArgs()

110 elseif($param->isDefaultValueAvailable())
111 $ps[]=$param->getDefaultValue();
112 else
113 return false;
114 }
115 $method->invokeArgs($object,$ps);
116 return true;
117 }
118 }

#8

/var/www/temp/limesurvey/application/core/SurveyCommonAction.php(83): CAction->runWithParamsInternal()

78 $oMethod = new ReflectionMethod($this, $sDefault);
79 }
80
81 // We're all good to go, let's execute it
82 // runWithParamsInternal would automatically get the parameters of the method and populate them as required with the params
83 return parent::runWithParamsInternal($this, $oMethod, $params);
84 }
85
86 /*
87
Some functions have different parameters, which are just an alias of the
88 * usual parameters we're getting in the url. This function just populates

#9
+
/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/web/CController.php(308): SurveyCommonAction->runWithParams()
#10
+
/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/web/CController.php(286): CController->runAction()
#11
+
/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/web/CController.php(265): CController->runActionWithFilters()
#12
+
/var/www/temp/limesurvey/application/controllers/AdminController.php(202): CController->run()
#13
+
/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/web/CWebApplication.php(282): AdminController->run()
#14
+
/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/web/CWebApplication.php(141): CWebApplication->runController()
#15
+
/var/www/temp/limesurvey/vendor/yiisoft/yii/framework/base/CApplication.php(185): CWebApplication->processRequest()
#16
+
/var/www/temp/limesurvey/index.php(161): CApplication->run()
2024-01-16 09:07:27 Apache Yii Framework/1.1.28

stadtbeck

stadtbeck

2024-01-23 11:26

reporter   ~79288

Hello!
Same problem here:

Error

Call to undefined method class@anonymous::get()

/var/www/limesurvey/application/core/plugins/AuthLDAP/AuthLDAP.php(297)

285 $oEvent->set('errorMessageTitle', gT("Failed to add user"));
286 $oEvent->set('errorMessageBody', gT("The email address is not valid."));
287 return null;
288 }
289 $new_pass = createPassword();
290 // If user is being auto created we set parent ID to 1 (admin user)
291 if (isset(Yii::app()->session['loginID'])) {
292 $parentID = Yii::app()->session['loginID'];
293 } else {
294 $parentID = 1;
295 }
296 $status = true;
297 $preCollectedUserArray = $oEvent->get('preCollectedUserArray', []);
298 if (!empty($preCollectedUserArray)) {
299 if (!empty($preCollectedUserArray['status'])) {
300 $status = $preCollectedUserArray['status'];
301 }
302 }
303 $iNewUID = User::insertUser($new_user, $new_pass, $new_full_name, $parentID, $new_email, null, $status);
304 if (!$iNewUID) {
305 $oEvent->set('errorCode', self::ERROR_ALREADY_EXISTING_USER);
306 $oEvent->set('errorMessageTitle', '');
307 $oEvent->set('errorMessageBody', gT("Failed to add user"));
308 return null;
309 }
Stack Trace
#0
– /var/www/limesurvey/application/core/plugins/AuthLDAP/AuthLDAP.php(579): AuthLDAP->_createNewUser()
574 }
575 public function __toString() {
576 return json_encode($this->warnings);
577 }
578 };
579 if (($iNewUID = $this->_createNewUser($dummyEvent, $username, $password)) && $this->get('automaticsurveycreation', null, null, false)) {
580 Permission::model()->setGlobalPermission($iNewUID, 'surveys', array('create_p'));
581 }
582 $user = $this->api->getUserByName($username);
583 if ($user === null) {
584 $this->setAuthFailure(self::ERROR_USERNAME_INVALID, gT('Credentials are valid but we failed to create a user'));
#1
unknown(0): AuthLDAP->newUserSession()
#2
– /var/www/limesurvey/application/libraries/PluginManager/PluginManager.php(269): call_user_func()
264 if (
265 !$event->isStopped()
266 && (empty($target) || in_array(get_class($subscription[0]), $target))
267 ) {
268 $subscription[0]->setEvent($event);
269 call_user_func($subscription);
270 }
271 }
272 }
273
274 return $event;
#3
– /var/www/limesurvey/application/core/LSUserIdentity.php(78): LimeSurvey\PluginManager\PluginManager->dispatchEvent()
73 throw new CHttpException(403, gT("You do not have permission to access this page."));
74 }
75 // Delegate actual authentication to plugin
76 $authEvent = new PluginEvent('newUserSession', $this); // TODO: rename the plugin function authenticate()
77 $authEvent->set('identity', $this);
78 App()->getPluginManager()->dispatchEvent($authEvent);
79 $pluginResult = $authEvent->get('result');
80 if ($pluginResult instanceof LSAuthResult) {
81 $result = $pluginResult;
82 } else {
83 $result->setError(self::ERROR_UNKNOWN_IDENTITY);
#4
– /var/www/limesurvey/application/controllers/admin/Authentication.php(167): LSUserIdentity->authenticate()
162
163 // Now authenticate
164 // This call LSUserIdentity::authenticate() (application/core/LSUserIdentity.php))
165 // which will call the plugin function newUserSession() (eg: Authdb::newUserSession() )
166 // TODO: for sake of clarity, the plugin function should be renamed to authenticate().
167 if ($identity->authenticate()) {
168 FailedLoginAttempt::model()->deleteAttempts(FailedLoginAttempt::TYPE_LOGIN);
169 App()->user->setState('plugin', $authMethod);
170
171 Yii::app()->session['just_logged_in'] = true;
172 Yii::app()->session['loginsummary'] = self::getSummary();
#5
– /var/www/limesurvey/application/controllers/admin/Authentication.php(51): Authentication::prepareLogin()
46 }
47 // The page should be shown only for non logged in users
48 $this->redirectIfLoggedIn();
49
50 // Result can be success, fail or data for template
51 $result = self::prepareLogin();
52
53 $isAjax = isset($_GET['ajax']) && $_GET['ajax'] == 1;
54 $succeeded = isset($result[0]) && $result[0] == 'success';
55 $failed = isset($result[0]) && $result[0] == 'failed';
56
#6
unknown(0): Authentication->index()
#7
– /var/www/limesurvey/vendor/yiisoft/yii/framework/web/actions/CAction.php(115): ReflectionMethod->invokeArgs()
110 elseif($param->isDefaultValueAvailable())
111 $ps[]=$param->getDefaultValue();
112 else
113 return false;
114 }
115 $method->invokeArgs($object,$ps);
116 return true;
117 }
118 }
#8
– /var/www/limesurvey/application/core/SurveyCommonAction.php(83): CAction->runWithParamsInternal()
78 $oMethod = new ReflectionMethod($this, $sDefault);
79 }
80
81 // We're all good to go, let's execute it
82 // runWithParamsInternal would automatically get the parameters of the method and populate them as required with the params
83 return parent::runWithParamsInternal($this, $oMethod, $params);
84 }
85
86 /
87 Some functions have different parameters, which are just an alias of the
88
usual parameters we're getting in the url. This function just populates
#9
– /var/www/limesurvey/vendor/yiisoft/yii/framework/web/CController.php(308): SurveyCommonAction->runWithParams()
303 {
304 $priorAction=$this->_action;
305 $this->_action=$action;
306 if($this->beforeAction($action))
307 {
308 if($action->runWithParams($this->getActionParams())===false)
309 $this->invalidActionParams($action);
310 else
311 $this->afterAction($action);
312 }
313 $this->_action=$priorAction;
#10
– /var/www/limesurvey/vendor/yiisoft/yii/framework/web/CController.php(286): CController->runAction()
281 @see runAction
282
/
283 public function runActionWithFilters($action,$filters)
284 {
285 if(empty($filters))
286 $this->runAction($action);
287 else
288 {
289 $priorAction=$this->_action;
290 $this->_action=$action;
291 CFilterChain::create($this,$action,$filters)->run();
#11
– /var/www/limesurvey/vendor/yiisoft/yii/framework/web/CController.php(265): CController->runActionWithFilters()
260 {
261 if(($parent=$this->getModule())===null)
262 $parent=Yii::app();
263 if($parent->beforeControllerAction($this,$action))
264 {
265 $this->runActionWithFilters($action,$this->filters());
266 $parent->afterControllerAction($this,$action);
267 }
268 }
269 else
270 $this->missingAction($actionID);
#12
– /var/www/limesurvey/application/controllers/AdminController.php(202): CController->run()
197 }
198
199 $this->runModuleController($action);
200
201
202 return parent::run($action);
203 }
204
205 /

206 Starting with LS4, 3rd party developer can extends any of the LimeSurve controllers.
207

#13
– /var/www/limesurvey/vendor/yiisoft/yii/framework/web/CWebApplication.php(282): AdminController->run()
277 {
278 list($controller,$actionID)=$ca;
279 $oldController=$this->_controller;
280 $this->_controller=$controller;
281 $controller->init();
282 $controller->run($actionID);
283 $this->_controller=$oldController;
284 }
285 else
286 throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',
287 array('{route}'=>$route===''?$this->defaultController:$route)));
#14
– /var/www/limesurvey/vendor/yiisoft/yii/framework/web/CWebApplication.php(141): CWebApplication->runController()
136 foreach(array_splice($this->catchAllRequest,1) as $name=>$value)
137 $_GET[$name]=$value;
138 }
139 else
140 $route=$this->getUrlManager()->parseUrl($this->getRequest());
141 $this->runController($route);
142 }
143
144 /
145 Registers the core application components.
146
This method overrides the parent implementation by registering additional core components.
#15
– /var/www/limesurvey/vendor/yiisoft/yii/framework/base/CApplication.php(185): CWebApplication->processRequest()
180 public function run()
181 {
182 if($this->hasEventHandler('onBeginRequest'))
183 $this->onBeginRequest(new CEvent($this));
184 register_shutdown_function(array($this,'end'),0,false);
185 $this->processRequest();
186 if($this->hasEventHandler('onEndRequest'))
187 $this->onEndRequest(new CEvent($this));
188 }
189
190 /

#16
– /var/www/limesurvey/index.php(161): CApplication->run()
156 require_once APPPATH . 'core/LSYii_Application' . EXT;
157
158 $config = require_once(APPPATH . 'config/internal' . EXT);
159
160 Yii::$enableIncludePath = false;
161 Yii::createApplication('LSYii_Application', $config)->run();
162
163 / End of file index.php /
164 / Location: ./index.php /
2024-01-23 10:53:12 Apache/2.4.41 (Ubuntu) Yii Framework/1.1.28

wehr

wehr

2024-01-23 16:21

reporter   ~79294

Hi,

A possible fix would be.

The problem is the dummy event created in AuthLDAP.php #570.
The "new class" has no "get" function.
....
$dummyEvent = new class() {
public $warnings;
public function set($a, $b) {
$this->warnings[$a] = $b;
}
public function get($a, $b) {
return null;
}
public function __toString() {
return json_encode($this->warnings);
}
};

This is working on my LimeSurvey Version 6.4.3

DenisChenu

DenisChenu

2024-01-23 16:42

developer   ~79295

No no :)

oEvent MUST be set

Let me check and test and fix

DenisChenu

DenisChenu

2024-01-23 17:00

developer   ~79296

Error.html (24,320 bytes)   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error</title>

<style type="text/css">
/*<![CDATA[*/
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}
body{line-height:1;}
ol,ul{list-style:none;}
blockquote,q{quotes:none;}
blockquote:before,blockquote:after,q:before,q:after{content:none;}
:focus{outline:0;}
ins{text-decoration:none;}
del{text-decoration:line-through;}
table{border-collapse:collapse;border-spacing:0;}

body {
	font: normal 9pt "Verdana";
	color: #000;
	background: #fff;
}

h1 {
	font: normal 18pt "Verdana";
	color: #f00;
	margin-bottom: .5em;
}

h2 {
	font: normal 14pt "Verdana";
	color: #800000;
	margin-bottom: .5em;
}

h3 {
	font: bold 11pt "Verdana";
}

pre {
	font: normal 11pt Menlo, Consolas, "Lucida Console", Monospace;
}

pre span.error {
	display: block;
	background: #fce3e3;
}

pre span.ln {
	color: #999;
	padding-right: 0.5em;
	border-right: 1px solid #ccc;
}

pre span.error-ln {
	font-weight: bold;
}

.container {
	margin: 1em 4em;
}

.version {
	color: gray;
	font-size: 8pt;
	border-top: 1px solid #aaa;
	padding-top: 1em;
	margin-bottom: 1em;
}

.message {
	color: #000;
	padding: 1em;
	font-size: 11pt;
	background: #f3f3f3;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
	margin-bottom: 1em;
	line-height: 160%;
}

.source {
	margin-bottom: 1em;
}

.code pre {
	background-color: #ffe;
	margin: 0.5em 0;
	padding: 0.5em;
	line-height: 125%;
	border: 1px solid #eee;
}

.source .file {
	margin-bottom: 1em;
	font-weight: bold;
}

.traces {
	margin: 2em 0;
}

.trace {
	margin: 0.5em 0;
	padding: 0.5em;
}

.trace.app {
	border: 1px dashed #c00;
}

.trace .number {
	text-align: right;
	width: 2em;
	padding: 0.5em;
}

.trace .content {
	padding: 0.5em;
}

.trace .plus,
.trace .minus {
	display:inline;
	vertical-align:middle;
	text-align:center;
	border:1px solid #000;
	color:#000;
	font-size:10px;
	line-height:10px;
	margin:0;
	padding:0 1px;
	width:10px;
	height:10px;
}

.trace.collapsed .minus,
.trace.expanded .plus,
.trace.collapsed pre {
	display: none;
}

.trace-file {
	cursor: pointer;
	padding: 0.2em;
}

.trace-file:hover {
	background: #f0ffff;
}
/*]]>*/
</style>
</head>

<body>
<div class="container">
	<h1>Error</h1>

	<p class="message">
		Call to undefined method class@anonymous::get()	</p>

	<div class="source">
		<p class="file">/home/limesurvey.shnoulle.net/www/application/core/plugins/AuthLDAP/AuthLDAP.php(297)</p>
		<div class="code"><pre><span class="ln">285</span>             $oEvent-&gt;set('errorMessageTitle', gT("Failed to add user"));
<span class="ln">286</span>             $oEvent-&gt;set('errorMessageBody', gT("The email address is not valid."));
<span class="ln">287</span>             return null;
<span class="ln">288</span>         }
<span class="ln">289</span>         $new_pass = createPassword();
<span class="ln">290</span>         // If user is being auto created we set parent ID to 1 (admin user)
<span class="ln">291</span>         if (isset(Yii::app()-&gt;session['loginID'])) {
<span class="ln">292</span>             $parentID = Yii::app()-&gt;session['loginID'];
<span class="ln">293</span>         } else {
<span class="ln">294</span>             $parentID = 1;
<span class="ln">295</span>         }
<span class="ln">296</span>         $status = true;
<span class="error"><span class="ln error-ln">297</span>         $preCollectedUserArray = $oEvent-&gt;get('preCollectedUserArray', []);
</span><span class="ln">298</span>         if (!empty($preCollectedUserArray)) {
<span class="ln">299</span>             if (!empty($preCollectedUserArray['status'])) {
<span class="ln">300</span>                 $status = $preCollectedUserArray['status'];
<span class="ln">301</span>             }
<span class="ln">302</span>         }
<span class="ln">303</span>         $iNewUID = User::insertUser($new_user, $new_pass, $new_full_name, $parentID, $new_email, null, $status);
<span class="ln">304</span>         if (!$iNewUID) {
<span class="ln">305</span>             $oEvent-&gt;set('errorCode', self::ERROR_ALREADY_EXISTING_USER);
<span class="ln">306</span>             $oEvent-&gt;set('errorMessageTitle', '');
<span class="ln">307</span>             $oEvent-&gt;set('errorMessageBody', gT("Failed to add user"));
<span class="ln">308</span>             return null;
<span class="ln">309</span>         }
</pre></div>	</div>

	<div class="traces">
		<h2>Stack Trace</h2>
				<table style="width:100%;">
						<tbody><tr class="trace app expanded">
			<td class="number">
				#0			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/core/plugins/AuthLDAP/AuthLDAP.php(579): <strong>AuthLDAP</strong>-&gt;<strong>_createNewUser</strong>()				</div>

				<div class="code"><pre><span class="ln">574</span>                 }
<span class="ln">575</span>                 public function __toString() {
<span class="ln">576</span>                     return json_encode($this-&gt;warnings);
<span class="ln">577</span>                 }
<span class="ln">578</span>             };
<span class="error"><span class="ln error-ln">579</span>             if (($iNewUID = $this-&gt;_createNewUser($dummyEvent, $username, $password)) &amp;&amp; $this-&gt;get('automaticsurveycreation', null, null, false)) {
</span><span class="ln">580</span>                 Permission::model()-&gt;setGlobalPermission($iNewUID, 'surveys', array('create_p'));
<span class="ln">581</span>             }
<span class="ln">582</span>             $user = $this-&gt;api-&gt;getUserByName($username);
<span class="ln">583</span>             if ($user === null) {
<span class="ln">584</span>                 $this-&gt;setAuthFailure(self::ERROR_USERNAME_INVALID, gT('Credentials are valid but we failed to create a user'));
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#1			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>AuthLDAP</strong>-&gt;<strong>newUserSession</strong>()				</div>

							</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#2			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/libraries/PluginManager/PluginManager.php(269): <strong>call_user_func</strong>()				</div>

				<div class="code"><pre><span class="ln">264</span>                 if (
<span class="ln">265</span>                     !$event-&gt;isStopped()
<span class="ln">266</span>                     &amp;&amp; (empty($target) || in_array(get_class($subscription[0]), $target))
<span class="ln">267</span>                 ) {
<span class="ln">268</span>                     $subscription[0]-&gt;setEvent($event);
<span class="error"><span class="ln error-ln">269</span>                     call_user_func($subscription);
</span><span class="ln">270</span>                 }
<span class="ln">271</span>             }
<span class="ln">272</span>         }
<span class="ln">273</span> 
<span class="ln">274</span>         return $event;
</pre></div>			</td>
		</tr>
						<tr class="trace app expanded">
			<td class="number">
				#3			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/core/LSUserIdentity.php(78): <strong>LimeSurvey\PluginManager\PluginManager</strong>-&gt;<strong>dispatchEvent</strong>()				</div>

				<div class="code"><pre><span class="ln">73</span>                     throw new CHttpException(403, gT("You do not have permission to access this page."));
<span class="ln">74</span>                 }
<span class="ln">75</span>                 // Delegate actual authentication to plugin
<span class="ln">76</span>                 $authEvent = new PluginEvent('newUserSession', $this); // TODO: rename the plugin function authenticate()
<span class="ln">77</span>                 $authEvent-&gt;set('identity', $this);
<span class="error"><span class="ln error-ln">78</span>                 App()-&gt;getPluginManager()-&gt;dispatchEvent($authEvent);
</span><span class="ln">79</span>                 $pluginResult = $authEvent-&gt;get('result');
<span class="ln">80</span>                 if ($pluginResult instanceof LSAuthResult) {
<span class="ln">81</span>                     $result = $pluginResult;
<span class="ln">82</span>                 } else {
<span class="ln">83</span>                     $result-&gt;setError(self::ERROR_UNKNOWN_IDENTITY);
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#4			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/controllers/admin/Authentication.php(167): <strong>LSUserIdentity</strong>-&gt;<strong>authenticate</strong>()				</div>

				<div class="code"><pre><span class="ln">162</span> 
<span class="ln">163</span>             // Now authenticate
<span class="ln">164</span>             // This call LSUserIdentity::authenticate() (application/core/LSUserIdentity.php))
<span class="ln">165</span>             // which will call the plugin function newUserSession() (eg: Authdb::newUserSession() )
<span class="ln">166</span>             // TODO: for sake of clarity, the plugin function should be renamed to authenticate().
<span class="error"><span class="ln error-ln">167</span>             if ($identity-&gt;authenticate()) {
</span><span class="ln">168</span>                 FailedLoginAttempt::model()-&gt;deleteAttempts(FailedLoginAttempt::TYPE_LOGIN);
<span class="ln">169</span>                 App()-&gt;user-&gt;setState('plugin', $authMethod);
<span class="ln">170</span> 
<span class="ln">171</span>                 Yii::app()-&gt;session['just_logged_in'] = true;
<span class="ln">172</span>                 Yii::app()-&gt;session['loginsummary'] = self::getSummary();
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#5			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/controllers/admin/Authentication.php(51): <strong>Authentication</strong>::<strong>prepareLogin</strong>()				</div>

				<div class="code"><pre><span class="ln">46</span>         }
<span class="ln">47</span>         // The page should be shown only for non logged in users
<span class="ln">48</span>         $this-&gt;redirectIfLoggedIn();
<span class="ln">49</span> 
<span class="ln">50</span>         // Result can be success, fail or data for template
<span class="error"><span class="ln error-ln">51</span>         $result = self::prepareLogin();
</span><span class="ln">52</span> 
<span class="ln">53</span>         $isAjax = isset($_GET['ajax']) &amp;&amp; $_GET['ajax'] == 1;
<span class="ln">54</span>         $succeeded = isset($result[0]) &amp;&amp; $result[0] == 'success';
<span class="ln">55</span>         $failed = isset($result[0]) &amp;&amp; $result[0] == 'failed';
<span class="ln">56</span> 
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#6			</td>
			<td class="content">
				<div class="trace-file">
										&nbsp;unknown(0): <strong>Authentication</strong>-&gt;<strong>index</strong>()				</div>

							</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#7			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/web/actions/CAction.php(115): <strong>ReflectionMethod</strong>-&gt;<strong>invokeArgs</strong>()				</div>

				<div class="code"><pre><span class="ln">110</span>             elseif($param-&gt;isDefaultValueAvailable())
<span class="ln">111</span>                 $ps[]=$param-&gt;getDefaultValue();
<span class="ln">112</span>             else
<span class="ln">113</span>                 return false;
<span class="ln">114</span>         }
<span class="error"><span class="ln error-ln">115</span>         $method-&gt;invokeArgs($object,$ps);
</span><span class="ln">116</span>         return true;
<span class="ln">117</span>     }
<span class="ln">118</span> }
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#8			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/core/SurveyCommonAction.php(83): <strong>CAction</strong>-&gt;<strong>runWithParamsInternal</strong>()				</div>

				<div class="code"><pre><span class="ln">78</span>             $oMethod = new ReflectionMethod($this, $sDefault);
<span class="ln">79</span>         }
<span class="ln">80</span> 
<span class="ln">81</span>         // We're all good to go, let's execute it
<span class="ln">82</span>         // runWithParamsInternal would automatically get the parameters of the method and populate them as required with the params
<span class="error"><span class="ln error-ln">83</span>         return parent::runWithParamsInternal($this, $oMethod, $params);
</span><span class="ln">84</span>     }
<span class="ln">85</span> 
<span class="ln">86</span>     /**
<span class="ln">87</span>      * Some functions have different parameters, which are just an alias of the
<span class="ln">88</span>      * usual parameters we're getting in the url. This function just populates
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#9			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/web/CController.php(308): <strong>SurveyCommonAction</strong>-&gt;<strong>runWithParams</strong>()				</div>

				<div class="code"><pre><span class="ln">303</span>     {
<span class="ln">304</span>         $priorAction=$this-&gt;_action;
<span class="ln">305</span>         $this-&gt;_action=$action;
<span class="ln">306</span>         if($this-&gt;beforeAction($action))
<span class="ln">307</span>         {
<span class="error"><span class="ln error-ln">308</span>             if($action-&gt;runWithParams($this-&gt;getActionParams())===false)
</span><span class="ln">309</span>                 $this-&gt;invalidActionParams($action);
<span class="ln">310</span>             else
<span class="ln">311</span>                 $this-&gt;afterAction($action);
<span class="ln">312</span>         }
<span class="ln">313</span>         $this-&gt;_action=$priorAction;
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#10			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/web/CController.php(286): <strong>CController</strong>-&gt;<strong>runAction</strong>()				</div>

				<div class="code"><pre><span class="ln">281</span>      * @see runAction
<span class="ln">282</span>      */
<span class="ln">283</span>     public function runActionWithFilters($action,$filters)
<span class="ln">284</span>     {
<span class="ln">285</span>         if(empty($filters))
<span class="error"><span class="ln error-ln">286</span>             $this-&gt;runAction($action);
</span><span class="ln">287</span>         else
<span class="ln">288</span>         {
<span class="ln">289</span>             $priorAction=$this-&gt;_action;
<span class="ln">290</span>             $this-&gt;_action=$action;
<span class="ln">291</span>             CFilterChain::create($this,$action,$filters)-&gt;run();
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#11			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/web/CController.php(265): <strong>CController</strong>-&gt;<strong>runActionWithFilters</strong>()				</div>

				<div class="code"><pre><span class="ln">260</span>         {
<span class="ln">261</span>             if(($parent=$this-&gt;getModule())===null)
<span class="ln">262</span>                 $parent=Yii::app();
<span class="ln">263</span>             if($parent-&gt;beforeControllerAction($this,$action))
<span class="ln">264</span>             {
<span class="error"><span class="ln error-ln">265</span>                 $this-&gt;runActionWithFilters($action,$this-&gt;filters());
</span><span class="ln">266</span>                 $parent-&gt;afterControllerAction($this,$action);
<span class="ln">267</span>             }
<span class="ln">268</span>         }
<span class="ln">269</span>         else
<span class="ln">270</span>             $this-&gt;missingAction($actionID);
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#12			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/application/controllers/AdminController.php(202): <strong>CController</strong>-&gt;<strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">197</span>         }
<span class="ln">198</span> 
<span class="ln">199</span>         $this-&gt;runModuleController($action);
<span class="ln">200</span> 
<span class="ln">201</span> 
<span class="error"><span class="ln error-ln">202</span>         return parent::run($action);
</span><span class="ln">203</span>     }
<span class="ln">204</span> 
<span class="ln">205</span>     /**
<span class="ln">206</span>      * Starting with LS4, 3rd party developer can extends any of the LimeSurve controllers.
<span class="ln">207</span>      *
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#13			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/web/CWebApplication.php(282): <strong>AdminController</strong>-&gt;<strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">277</span>         {
<span class="ln">278</span>             list($controller,$actionID)=$ca;
<span class="ln">279</span>             $oldController=$this-&gt;_controller;
<span class="ln">280</span>             $this-&gt;_controller=$controller;
<span class="ln">281</span>             $controller-&gt;init();
<span class="error"><span class="ln error-ln">282</span>             $controller-&gt;run($actionID);
</span><span class="ln">283</span>             $this-&gt;_controller=$oldController;
<span class="ln">284</span>         }
<span class="ln">285</span>         else
<span class="ln">286</span>             throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',
<span class="ln">287</span>                 array('{route}'=&gt;$route===''?$this-&gt;defaultController:$route)));
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#14			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/web/CWebApplication.php(141): <strong>CWebApplication</strong>-&gt;<strong>runController</strong>()				</div>

				<div class="code"><pre><span class="ln">136</span>             foreach(array_splice($this-&gt;catchAllRequest,1) as $name=&gt;$value)
<span class="ln">137</span>                 $_GET[$name]=$value;
<span class="ln">138</span>         }
<span class="ln">139</span>         else
<span class="ln">140</span>             $route=$this-&gt;getUrlManager()-&gt;parseUrl($this-&gt;getRequest());
<span class="error"><span class="ln error-ln">141</span>         $this-&gt;runController($route);
</span><span class="ln">142</span>     }
<span class="ln">143</span> 
<span class="ln">144</span>     /**
<span class="ln">145</span>      * Registers the core application components.
<span class="ln">146</span>      * This method overrides the parent implementation by registering additional core components.
</pre></div>			</td>
		</tr>
						<tr class="trace core collapsed">
			<td class="number">
				#15			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/vendor/yiisoft/yii/framework/base/CApplication.php(185): <strong>CWebApplication</strong>-&gt;<strong>processRequest</strong>()				</div>

				<div class="code"><pre><span class="ln">180</span>     public function run()
<span class="ln">181</span>     {
<span class="ln">182</span>         if($this-&gt;hasEventHandler('onBeginRequest'))
<span class="ln">183</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="ln">184</span>         register_shutdown_function(array($this,'end'),0,false);
<span class="error"><span class="ln error-ln">185</span>         $this-&gt;processRequest();
</span><span class="ln">186</span>         if($this-&gt;hasEventHandler('onEndRequest'))
<span class="ln">187</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">188</span>     }
<span class="ln">189</span> 
<span class="ln">190</span>     /**
</pre></div>			</td>
		</tr>
						<tr class="trace app collapsed">
			<td class="number">
				#16			</td>
			<td class="content">
				<div class="trace-file">
											<div class="plus">+</div>
						<div class="minus">–</div>
										&nbsp;/home/limesurvey.shnoulle.net/www/index.php(161): <strong>CApplication</strong>-&gt;<strong>run</strong>()				</div>

				<div class="code"><pre><span class="ln">156</span> require_once APPPATH . 'core/LSYii_Application' . EXT;
<span class="ln">157</span> 
<span class="ln">158</span> $config = require_once(APPPATH . 'config/internal' . EXT);
<span class="ln">159</span> 
<span class="ln">160</span> Yii::$enableIncludePath = false;
<span class="error"><span class="ln error-ln">161</span> Yii::createApplication('LSYii_Application', $config)-&gt;run();
</span><span class="ln">162</span> 
<span class="ln">163</span> /* End of file index.php */
<span class="ln">164</span> /* Location: ./index.php */
</pre></div>			</td>
		</tr>
				</tbody></table>
	</div>

	<div class="version">
		2024-01-23 16:59:48 nginx/1.22.1 <a href="https://www.yiiframework.com/">Yii Framework</a>/1.1.28	</div>
</div>

<script type="text/javascript">
/*<![CDATA[*/
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)");
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)");

var e = document.getElementsByTagName("div");
for(var j=0,len=e.length;j<len;j++){
	if(traceReg.test(e[j].className)){
		e[j].onclick = function(){
			var trace = this.parentNode.parentNode;
			if(collapsedReg.test(trace.className))
				trace.className = trace.className.replace("collapsed", "expanded");
			else
				trace.className = trace.className.replace("expanded", "collapsed");
		}
	}
}
/*]]>*/
</script>



</body></html>
Error.html (24,320 bytes)   
DenisChenu

DenisChenu

2024-01-23 17:28

developer   ~79297

https://github.com/LimeSurvey/LimeSurvey/pull/3711

DenisChenu

DenisChenu

2024-01-23 17:34

developer   ~79298

@ reporter : if you can test patch here : https://github.com/LimeSurvey/LimeSurvey/pull/3711

And if you find a way where

  • user can be find when login
  • but not after (when user creation)
    It can be interesting
greiling

greiling

2024-01-23 17:53

reporter   ~79299

Hello DenisChenu,

thank you for the patch.
User can login - logout and login again.

and now I try to understand, which way to find!?

DenisChenu

DenisChenu

2024-01-23 18:16

developer   ~79300

and now I try to understand, which way to find!?

I mean : try to have an LDAP error when user was created, after user was find in password check …
1st connexion : user was find
2nd connexion : LDAP error

But i really don't see a way to have such error …

greiling

greiling

2024-01-23 18:25

reporter   ~79301

as ldap user I tried wrong password - failed

I deleted the ldap user

try to login as ldap user with wrong credentials - failed
try to login as ldap user with right credetials - success

girish

girish

2024-01-24 12:17

reporter   ~79308

I can confirm the patch fixes the issue.

I tested the following:

  • Local login as admin still works
  • LDAP User is automatically created
  • LDAP User with bad password cannot login
  • LDAP User with correct password can login
Dennis1993

Dennis1993

2024-01-27 13:03

reporter   ~79316

The patch from DenisChenu is working for me, users can authenticate and new users will be created! :)
Thanks!

DenisChenu

DenisChenu

2024-01-31 15:43

developer   ~79374

Fix committed to master branch: http://bugs.limesurvey.org/plugin.php?page=Source/view&id=36023

DenisChenu

DenisChenu

2024-01-31 15:43

developer   ~79375

Fix committed to master branch: http://bugs.limesurvey.org/plugin.php?page=Source/view&id=36024

LimeBot

LimeBot

2024-02-05 11:32

administrator   ~79410

Fixed in Release 6.4.5+240205

Related Changesets

LimeSurvey: master e78bedb2

2024-01-31 16:31

DenisChenu

Committer: GitHub


Details Diff
Fixed issue 19347: No generation of new user within first LDAP login (#3711) Affected Issues
19347
mod - application/core/plugins/AuthLDAP/AuthLDAP.php Diff File

LimeSurvey: master e78bedb2

2024-01-31 16:31

DenisChenu

Committer: GitHub


Details Diff
Fixed issue 19347: No generation of new user within first LDAP login (#3711) Affected Issues
19347
mod - application/core/plugins/AuthLDAP/AuthLDAP.php Diff File

Issue History

Date Modified Username Field Change
2024-01-12 15:12 greiling New Issue
2024-01-15 14:04 girish Note Added: 79165
2024-01-15 14:04 girish Bug heat 0 => 2
2024-01-16 09:41 DenisChenu Note Added: 79172
2024-01-16 09:41 DenisChenu Bug heat 2 => 4
2024-01-16 10:09 greiling Note Added: 79174
2024-01-16 10:09 greiling Bug heat 4 => 6
2024-01-23 11:26 stadtbeck Note Added: 79288
2024-01-23 11:26 stadtbeck Bug heat 6 => 8
2024-01-23 11:26 guest Bug heat 8 => 14
2024-01-23 16:21 wehr Note Added: 79294
2024-01-23 16:21 wehr Bug heat 14 => 16
2024-01-23 16:42 DenisChenu Note Added: 79295
2024-01-23 17:00 DenisChenu Note Added: 79296
2024-01-23 17:00 DenisChenu File Added: Error.html
2024-01-23 17:01 DenisChenu Assigned To => DenisChenu
2024-01-23 17:01 DenisChenu Status new => assigned
2024-01-23 17:28 DenisChenu Status assigned => ready for code review
2024-01-23 17:28 DenisChenu Note Added: 79297
2024-01-23 17:34 DenisChenu Note Added: 79298
2024-01-23 17:53 greiling Note Added: 79299
2024-01-23 18:16 DenisChenu Note Added: 79300
2024-01-23 18:25 greiling Note Added: 79301
2024-01-24 08:20 DenisChenu Assigned To DenisChenu => gabrieljenik
2024-01-24 12:17 girish Note Added: 79308
2024-01-27 13:03 Dennis1993 Note Added: 79316
2024-01-27 13:03 Dennis1993 Bug heat 16 => 18
2024-01-29 08:26 DenisChenu Relationship added has duplicate 19379
2024-01-29 08:26 DenisChenu Bug heat 18 => 24
2024-01-31 15:31 tibor.pacalat Status ready for code review => resolved
2024-01-31 15:31 tibor.pacalat Resolution open => fixed
2024-01-31 15:43 DenisChenu Changeset attached => LimeSurvey master e78bedb2
2024-01-31 15:43 DenisChenu Changeset attached => LimeSurvey master e78bedb2
2024-01-31 15:43 DenisChenu Note Added: 79374
2024-01-31 15:43 DenisChenu Note Added: 79375
2024-01-31 15:43 DenisChenu Assigned To gabrieljenik => DenisChenu
2024-01-31 15:43 DenisChenu Assigned To gabrieljenik => DenisChenu
2024-02-05 11:32 LimeBot Note Added: 79410
2024-02-05 11:32 LimeBot Status resolved => closed
2024-02-05 11:32 LimeBot Bug heat 24 => 26
2024-05-08 09:14 guest Bug heat 26 => 32