View Issue Details

This issue 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)
Git branch / Pull Request URLhttps://github.com/LimeSurvey/LimeSurvey/pull/3711

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 Git branch / Pull Request URL => https://github.com/LimeSurvey/LimeSurvey/pull/3711
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