| | @@ -1392,23 +1392,40 @@ |
| 1392 | 1392 | @ <p><span class="loginError"> |
| 1393 | 1393 | @ %s(zUsername) already exists. |
| 1394 | 1394 | @ </span></p> |
| 1395 | 1395 | }else{ |
| 1396 | 1396 | char *zPw = sha1_shared_secret(blob_str(&passwd), blob_str(&login), 0); |
| 1397 | + char *zErr = 0; |
| 1397 | 1398 | int uid; |
| 1398 | 1399 | db_multi_exec( |
| 1399 | 1400 | "INSERT INTO user(login,pw,cap,info,mtime)" |
| 1400 | 1401 | "VALUES(%B,%Q,%B,%B,strftime('%%s','now'))", |
| 1401 | 1402 | &login, zPw, &caps, &contact |
| 1402 | 1403 | ); |
| 1404 | + admin_log( "Registered user [%q] with capabilities [%q].", |
| 1405 | + blob_str(&login), blob_str(&caps) ); |
| 1406 | + if( login_group_name() && db_get_boolean("register-group", 0) ){ |
| 1407 | + login_group_apply(0, blob_str(&login), blob_str(&passwd), |
| 1408 | + blob_str(&contact), blob_str(&caps), &zErr); |
| 1409 | + admin_log( "Registered user [%q] in all login groups " |
| 1410 | + "with capabilities [%q].", |
| 1411 | + blob_str(&login), blob_str(&caps) ); |
| 1412 | + } |
| 1403 | 1413 | free(zPw); |
| 1404 | 1414 | |
| 1415 | + if( zErr ){ |
| 1416 | + style_header("User Register Error"); |
| 1417 | + admin_log( "Error registering user '%q': %s'.", login, zErr ); |
| 1418 | + @ <p><span class="loginError">%s(zErr)</span></p> |
| 1419 | + style_footer(); |
| 1420 | + fossil_free(zErr); |
| 1421 | + return; |
| 1422 | + } |
| 1405 | 1423 | /* The user is registered, now just log him in. */ |
| 1406 | 1424 | uid = db_int(0, "SELECT uid FROM user WHERE login=%Q", zUsername); |
| 1407 | 1425 | login_set_user_cookie( zUsername, uid, NULL ); |
| 1408 | 1426 | redirect_to_g(); |
| 1409 | | - |
| 1410 | 1427 | } |
| 1411 | 1428 | } |
| 1412 | 1429 | } |
| 1413 | 1430 | |
| 1414 | 1431 | /* Prepare the captcha. */ |
| | @@ -1696,5 +1713,46 @@ |
| 1696 | 1713 | "DELETE FROM config " |
| 1697 | 1714 | " WHERE name GLOB 'peer-*'" |
| 1698 | 1715 | " OR name GLOB 'login-group-*';" |
| 1699 | 1716 | ); |
| 1700 | 1717 | } |
| 1718 | + |
| 1719 | +/* |
| 1720 | +** Apply user changes to the login group |
| 1721 | +** |
| 1722 | +** This routine will apply login information to repositories that are part |
| 1723 | +** of a login group. If there is an error, memory will be allocated and an |
| 1724 | +** error string pointed to by pzErr which can be freed with fossil_free(). |
| 1725 | +** |
| 1726 | +*/ |
| 1727 | +void login_group_apply( |
| 1728 | + const char *zOldLogin, /* Old login name when changing login */ |
| 1729 | + const char *zLogin, /* Login name to create or change */ |
| 1730 | + const char *zPw, /* Password as shared secret */ |
| 1731 | + const char *zInfo, /* Contact information for login */ |
| 1732 | + const char *zCap, /* Capabilities to assign to login */ |
| 1733 | + char **pzErr /* Variable in which error will be returned */ |
| 1734 | +) { |
| 1735 | + Blob sql; |
| 1736 | + blob_zero(&sql); |
| 1737 | + if( zOldLogin==0 ){ |
| 1738 | + blob_appendf(&sql, |
| 1739 | + "INSERT INTO user(login)" |
| 1740 | + " SELECT %Q WHERE NOT EXISTS(SELECT 1 FROM user WHERE login=%Q);", |
| 1741 | + zLogin, zLogin |
| 1742 | + ); |
| 1743 | + zOldLogin = zLogin; |
| 1744 | + } |
| 1745 | + blob_appendf(&sql, |
| 1746 | + "UPDATE user SET login=%Q," |
| 1747 | + " pw=coalesce(shared_secret(%Q,%Q," |
| 1748 | + "(SELECT value FROM config WHERE name='project-code')),pw)," |
| 1749 | + " info=%Q," |
| 1750 | + " cap=%Q," |
| 1751 | + " mtime=now()" |
| 1752 | + " WHERE login=%Q;", |
| 1753 | + zLogin, zPw, zLogin, zInfo, zCap, |
| 1754 | + zOldLogin |
| 1755 | + ); |
| 1756 | + login_group_sql(blob_str(&sql), "<li> ", " </li>\n", pzErr); |
| 1757 | + blob_reset(&sql); |
| 1758 | +} |
| 1701 | 1759 | |