Extension talk:AuthIMAP
For what it's worth: I installed AuthIMAP with Mediawiki 1.12.
It worked OK, except that I can't manage user rights because:
- My mail server uses a full email address for login - "mary@example.com"
- We have two domains, so I can't hard-code the domain into Auth_imap.php
- As a result, my IMAP-Authenticated usernames contain an "@"
- The "@" is used to split the username into two parts in includes/SpecialUserrights.php - something to do with interwiki user rights.
I can force Special:Userrights to work if I comment out the lines shown below:
220 ## $parts = explode( '@', $username ); 221 ## if( count( $parts ) < 2 ) { 222 $name = trim( $username ); 223 $database = ''; 224 ## } else { 225 ## list( $name, $database ) = array_map( 'trim', $parts ); 226 ## 227 ## if( !$wgUser->isAllowed( 'userrights-interwiki' ) ) { 228 ## $wgOut->addWikiMsg( 'userrights-no-interwiki' ); 229 ## return null; 230 ## } 231 ## if( !UserRightsProxy::validDatabase( $database ) ) { 232 ## $wgOut->addWikiMsg( 'userrights-nodatabase', $database ); 233 ## return null; 234 ## } 235 ## }
I also see that includes/User.php includes a function designed to prevent the creation of usernames containg '@':
475 /** 476 * Usernames which fail to pass this function will be blocked 477 * from new account registrations, but may be used internally 478 * either by batch processes or by user accounts which have 479 * already been created. 480 * 481 * Additional character blacklisting may be added here 482 * rather than in isValidUserName() to avoid disrupting 483 * existing accounts. 484 * 485 * @param string $name 486 * @return bool 487 */ 488 static function isCreatableName( $name ) { 489 return 490 self::isUsableName( $name ) && 491 492 // Registration-time character blacklisting... 493 strpos( $name, '@' ) === false; 494 }
Possible Solution
edit:User Rights and @ sign in login names. Set $wgInvalidUsernameCharacters = '^' $wgUserrightsInterwikiDelimiter = '^'
User Rights
editAll my users have admin rights and the WikiSysop account only works if I disable the extension. Work-arounds where users are users and the WikiSysop account is THE admin account?
The imap_open function should generally fail, as it is called after $username being transcoded with ucfirst. Most imap servers are case sensitive, for a good reason. You would either have to specifically convert to lowercase within authenticate function, like I did below, or rearrange the functions. Throwing in a print_r(imap_errors()); before satisfied is also a good idea.
function authenticate($username, $password) { // lowercase username before imap check $username = strtolower($username); // Connect to the IMAP server running on port 143 on example.com using tls $mbox = imap_open("{imap.server.com:143/imap/tls/novalidate-cert}INBOX", "$username", "$password", OP_HALFOPEN); print_r(imap_errors());
Regards,
Benjamin, Norway
Query Multiple IMAP servers
editIs it possible to setup this extension to query multiple email servers? My users are spread across at least a five email servers. Thanks!
Gmail
edita quick note if you want to auth against gmail use this as your host string
$authhost="{imap.gmail.com:993/imap/ssl/novalidate-cert}";
if ($mbox=imap_open( $authhost, $user, $pass ))