amazing. thanks so much!
cheers, dan
On 21.02.2012 23:23, Phillip Wyman wrote:
> Here is a script I wrote for syncing the shadow file to SOGo's SQL database.
> I have it run in cron every minute, and redirect its output to a log file
> with the correct permissions.
> This is using SOGo's crypt password storage option (undocumented last time I
> checked).
>
> The variables at the top are fairly self-explanatory.
> The MIN_UID constant defines what the minimum uid in /etc/passwd to sync
> above is.
> The excluded users array allows you to specify certain users in /etc/passwd
> not to sync.
>
> Now for my brief disclaimer :
>
> I haven't scrutinized this script much for security, I take no responsibility
> for any side effects, and it comes with no warranty.
>
> Maybe it will help.
>
> #!/usr/bin/php
> <?php
> define ('SOGO_DBHOST', 'localhost');
> define ('SOGO_DBUSER', 'sogouser');
> define ('SOGO_DBPASS', '12345');
> define ('SOGO_DBNAME', 'sogo');
>
> define ('DOMAIN', 'yourdomain.com');
> define ('SHADOW_FILE', '/etc/shadow');
> define ('PASSWD_FILE', '/etc/passwd');
> define ('MIN_UID', '1000');
>
> $excluded_users = array ();
> $excluded_users[] = 'webadmin';
> $excluded_users[] = 'scanner';
> $excluded_users[] = 'temp';
> $excluded_users[] = 'sogo';
>
> $sogo_rows = array ();
>
> $fc = file(PASSWD_FILE);
>
> if (!($fc)) {
> echo "\n" . 'Could not obtain the contents of : ' . PASSWD_FILE . "\n";
> exit(1);
> }
>
> foreach ($fc as $line)
> {
> $line = rtrim($line);
> $line_slices = explode(':',$line);
>
> $username = $line_slices[0];
>
> if (in_array($username,$excluded_users)) {
> continue;
> }
>
> $uid = $line_slices[2];
>
> if ($uid < MIN_UID) {
> continue;
> }
>
> $comment = $line_slices[4];
>
> if (empty($comment)) {
> $comment = $username;
> }
>
> $email = $username . '@' . DOMAIN;
>
> $sogo_rows[$username] = array('uid' => $uid, 'comment' => $comment, 'email'
> => $email);
> }
>
> $fc = file(SHADOW_FILE);
>
> if (!($fc)) {
> echo "\n" . 'Could not obtain the contents of : ' . SHADOW_FILE . "\n";
> exit(1);
> }
>
> foreach ($fc as $line)
> {
> $line = rtrim($line);
> $line_slices = explode(':',$line);
>
> $username = $line_slices[0];
>
> if (!array_key_exists($username,$sogo_rows)) {
> continue;
> }
>
> $sogo_rows[$username]['hash'] = $line_slices[1];
> }
>
> if (sizeof($sogo_rows) == 0) {
> echo "\n" . 'No valid users to add were found.' . "\n";
> exit(1);
> }
>
> $sogo_dbcon = mysql_connect(SOGO_DBHOST,SOGO_DBUSER,SOGO_DBPASS,TRUE);
>
> if (!($sogo_dbcon)) {
> die('Error connecting to mysql: ' . mysql_error());
> }
>
> mysql_select_db(SOGO_DBNAME, $sogo_dbcon) or die('Error: Could not select
> database ' . $sogo_dbname);
>
> foreach ($sogo_rows as $username => $user_attrs) {
> $username = mysql_real_escape_string($username);
>
> $query = "SELECT c_password,c_cn FROM sogo_view WHERE c_uid='$username'";
> $result = mysql_query($query,$sogo_dbcon);
>
> $num_rows = mysql_num_rows($result);
>
> if ($num_rows == 0) {
> $user_attrs = array_map('mysql_real_escape_string', $user_attrs);
>
> $query = "INSERT into sogo_view (c_uid,c_name,c_password,c_cn,mail)
> VALUES
> ('$username','$username','$user_attrs[hash]','$user_attrs[comment]','$user_attrs[email]')";
> $result = mysql_query($query,$sogo_dbcon);
>
> if (!($result)) {
> mysql_close($sogo_dbcon);
> echo "\n" . 'Failed adding user : ' . $username . ' to sogo_view
> table.' . "\n";
> exit(1);
> }
>
> echo "\n" . 'Added user : ' . $username . ' to sogo_view table.' . "\n";
> }
> else {
> $row = mysql_fetch_assoc($result);
>
> $query_str = '';
>
> if ($user_attrs['hash'] != $row['c_password']) {
> $user_attrs['hash'] = mysql_real_escape_string($user_attrs['hash']);
>
> $query_str .= "c_password='$user_attrs[hash]',";
> }
>
> if ($user_attrs['comment'] != $row['c_cn']) {
> $user_attrs['comment'] =
> mysql_real_escape_string($user_attrs['comment']);
>
> $query_str .= "c_cn='$user_attrs[comment]',";
> }
>
> if (!empty($query_str)) {
> $query_str = rtrim($query_str,',');
>
> $query_str = 'UPDATE sogo_view set ' . $query_str . " WHERE
> c_uid='$username'";
> $result = mysql_query($query_str,$sogo_dbcon);
>
> if (!($result)) {
> mysql_close($sogo_dbcon);
> echo "\n" . 'Failed updating data for : ' . $username . ' in
> sogo_view table.' . "\n";
> exit(1);
> }
>
> echo "\n" . 'Updated data for : ' . $username . ' in sogo_view table.'
> . "\n";
>
> //Disabled reloading of memcached for now, instead the
> "SOGoCacheCleanupInterval" setting has been lowered
> //from the default of 300 seconds to 30
> //$result = system('/etc/init.d/memcached reload');
>
> //echo "\n" . $result . "\n";
> }
> }
> }
>
> ?>
>
> On 02/18/2012 02:54 AM, Daniel Erlacher wrote:
>> Hello
>>
>> I am running a ISPconfig installation and ideally it would
>> be possible to sync the usernames and passwords from /etc/shadow
>> with the mysql authentification that i am using for sogo.
>>
>> is there any chance that this is developed? it would be highly appreciated.
>>
>> there was a discussion on this list already, in 2010:
>> http://www.mail-archive.com/[email protected]/msg02552.html
>>
>> ISPconfig uses basically crypt-md5 with salt, which is the same that
>> debian uses in /etc/shadow or passwd.
>>
>> thanks
>> dan
>>
>>
>>
>>
>
>
>
>
> The information contained in this e-mail message may be privileged,
> confidential and protected from disclosure. If you are not the intended
> recipient, any dissemination, distribution or copying is strictly prohibited.
> If you think that you have received this e-mail message in error, please
> e-mail the sender at the above e-mail address.
>
--
>> http://skillz.biz <<
>> professional services & more <<
--
[email protected]
https://inverse.ca/sogo/lists