File Makefile.in changed (mode: 100644) (index 19dfd01..8e1c27b) | |||
... | ... | install: all | |
14 | 14 | @mkdir -p $(I_USR_SHARE)/$(PRJ) | @mkdir -p $(I_USR_SHARE)/$(PRJ) |
15 | 15 | cp -vdr admin inc hooks root scripts $(I_USR_SHARE)/$(PRJ) | cp -vdr admin inc hooks root scripts $(I_USR_SHARE)/$(PRJ) |
16 | 16 | @mkdir -p $(I_ETC)/xinetd.d | @mkdir -p $(I_ETC)/xinetd.d |
17 | cp -vd samples/rg $(I_ETC)/xinetd.d/rocketgit | ||
17 | cp -vd --no-clobber samples/rg $(I_ETC)/xinetd.d/rocketgit | ||
18 | 18 | @mkdir -p $(I_ETC)/cron.d | @mkdir -p $(I_ETC)/cron.d |
19 | cp -vd samples/cron $(I_ETC)/cron.d/rocketgit | ||
19 | cp -vd --no-clobber samples/cron $(I_ETC)/cron.d/rocketgit | ||
20 | 20 | @mkdir -p $(I_ETC)/httpd/conf.d | @mkdir -p $(I_ETC)/httpd/conf.d |
21 | cp -vd samples/rg.conf $(I_ETC)/httpd/conf.d/rocketgit.conf | ||
21 | cp -vd --no-clobber samples/rg.conf $(I_ETC)/httpd/conf.d/rocketgit.conf | ||
22 | 22 | @mkdir -p $(I_ETC)/rocketgit | @mkdir -p $(I_ETC)/rocketgit |
23 | cp -vd samples/config.php $(I_ETC)/rocketgit/ | ||
23 | cp -vd --no-clobber samples/config.php $(I_ETC)/rocketgit/ | ||
24 | 24 | cp -vd samples/config.php $(I_ETC)/rocketgit/config.php.sample | cp -vd samples/config.php $(I_ETC)/rocketgit/config.php.sample |
25 | 25 | @mkdir -p $(I_ETC)/logrotate.d | @mkdir -p $(I_ETC)/logrotate.d |
26 | cp -vd samples/logrotate $(I_ETC)/logrotate.d/rocketgit | ||
26 | cp -vd --no-clobber samples/logrotate $(I_ETC)/logrotate.d/rocketgit | ||
27 | 27 | @mkdir -p $(I_VAR_LOG)/$(PRJ) | @mkdir -p $(I_VAR_LOG)/$(PRJ) |
28 | @chown rocketgit:rocketgit $(I_VAR_LOG)/$(PRJ) | ||
28 | @-chown rocketgit:rocketgit $(I_VAR_LOG)/$(PRJ) | ||
29 | 29 | @chmod 0700 $(I_VAR_LOG)/$(PRJ) | @chmod 0700 $(I_VAR_LOG)/$(PRJ) |
30 | 30 | @mkdir -p $(I_VAR_LOG)/$(PRJ)-web | @mkdir -p $(I_VAR_LOG)/$(PRJ)-web |
31 | @chown apache:apache $(I_VAR_LOG)/$(PRJ)-web | ||
31 | @-chown apache:apache $(I_VAR_LOG)/$(PRJ)-web | ||
32 | 32 | @chmod 0700 $(I_VAR_LOG)/$(PRJ)-web | @chmod 0700 $(I_VAR_LOG)/$(PRJ)-web |
33 | 33 | @mkdir -p $(I_VAR_RUN)/$(PRJ) | @mkdir -p $(I_VAR_RUN)/$(PRJ) |
34 | @chown rocketgit:rocketgit $(I_VAR_RUN)/$(PRJ) | ||
34 | @-chown rocketgit:rocketgit $(I_VAR_RUN)/$(PRJ) |
File README changed (mode: 100644) (index 897b3b7..619aed8) | |||
1 | == Rights == | ||
2 | A - Admin - can edit repo info, can add/remove rights for users | ||
3 | F - Fetch | ||
4 | P - Push | ||
5 | D - Delete branch | ||
6 | Z - Forced push (history rewriting) | ||
1 | == About == | ||
2 | . Website: http://kernel.embedromix.ro/us/ | ||
3 | . Author: Catalin(ux) M. BOIE | ||
4 | . Description: Light and fast Git hosting solution | ||
5 | . Language: PHP | ||
6 | . Database: PostgreSQL | ||
7 | |||
8 | |||
9 | == Features == | ||
10 | . No Java | ||
11 | . No Javascript | ||
12 | . Very little dependencies | ||
13 | . SELinux friendly | ||
14 | . | ||
7 | 15 | ||
8 | Notes: | ||
9 | - For anonymous access, we store rights directly in repo info row. | ||
10 | 16 | ||
11 | 17 | == Install == | == Install == |
18 | . Edit /etc/rocketgit/config.php | ||
19 | |||
12 | 20 | . Install and configure PostgreSQL server | . Install and configure PostgreSQL server |
21 | # yum install postgresql-server | ||
22 | # systemctl enable postgresql.service | ||
23 | # service postgresql initdb (TAKE CARE! YOU MAY DESTROY ALL YOUR DATA!) | ||
24 | # systemctl start postgresql.service | ||
25 | |||
13 | 26 | . Create a rocketgit user | . Create a rocketgit user |
14 | 27 | # su - postgres | # su - postgres |
15 | $ createuser -d -R -S -W rocketgit | ||
28 | $ createuser -d -R -S rocketgit | ||
16 | 29 | ||
17 | 30 | . Create the database | . Create the database |
18 | 31 | # su - postgres | # su - postgres |
19 | 32 | $ createdb -O rocketgit rocketgit | $ createdb -O rocketgit rocketgit |
20 | 33 | ||
21 | . Set correct rights in pg_hba.conf: | ||
22 | local rocketgit rocketgit trust | ||
34 | . Set correct rights in pg_ident.conf/pg_hba.conf and restart: | ||
35 | Add the following lines in pg_ident.conf: | ||
36 | rg apache rocketgit | ||
37 | rg rocketgit rocketgit | ||
38 | rg root rocketgit | ||
39 | |||
40 | Add the following line, before wildcard matches, in pg_hba.conf: | ||
41 | local rocketgit rocketgit ident map=rg | ||
42 | |||
43 | systemctl reload postgresql.service | ||
23 | 44 | ||
24 | 45 | . Run instalation script | . Run instalation script |
25 | 46 | # php /usr/share/rocketgit/admin/init.php | # php /usr/share/rocketgit/admin/init.php |
26 | 47 | ||
27 | 48 | . SELinux | . SELinux |
49 | # setsebool -P httpd_can_network_connect_db on | ||
50 | # setsebool -P httpd_can_network_memcache on | ||
51 | # setsebool -P httpd_can_sendmail on |
File TODO changed (mode: 100644) (index a330e13..935536b) | |||
1 | 1 | == BEFORE FIRST RELEASE! == | == BEFORE FIRST RELEASE! == |
2 | [ ] Take care of PHP's time limit to not interfere with the rest. | ||
2 | 3 | [ ] Validate e-mails. | [ ] Validate e-mails. |
3 | 4 | [ ] You cannot admin rights of a repository if is not yours. | [ ] You cannot admin rights of a repository if is not yours. |
4 | 5 | [ ] Check XSRF attacks and other types. | [ ] Check XSRF attacks and other types. |
5 | 6 | [ ] Edit repo (rights) does not work. | [ ] Edit repo (rights) does not work. |
7 | [ ] Postgresql pg_hba.conf fixes. | ||
8 | [ ] $rg_pass_key should be done in init.php | ||
9 | [ ] Decide what fields to show when editting a user info (user.form.php). | ||
6 | 10 | [ ] | [ ] |
7 | 11 | ||
8 | 12 | == Low priority == | == Low priority == |
13 | [ ] rg_forgot_email | ||
9 | 14 | [ ] We should make a repo dirty ony if user pushed something with success. | [ ] We should make a repo dirty ony if user pushed something with success. |
10 | 15 | [ ] <link rel="icon" type="image/png" id="favicon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACGFjVEwAAAASAAAAAJNtBPIAAAAaZmNUTAAAAAAAAAAQAAAAEAAAAAAAAAAALuAD6AABhIDeugAAALhJREFUOI2Nk8sNxCAMRDlGohauXFOMpfTiAlxICqAELltHLqlgctg1InzMRhpFAc%2BLGWTnmoeZYamt78zXdZmaQtQMADlnU0OIAlbmJUBEcO4bRKQY2rUXIPmAGnDuG%2FBx3%2FfvOPVaDUg%2BoAPUf1PArIMCSD5glMEsUGaG%2BkyAFWIBaCsKuA%2BHGCNijLgP133XgOEtaPFMy2vUolEGJoCIzBmoRUR9%2B7rxj16DZaW%2FmgtmxnJ8V3oAnApQwNS5zpcAAAAaZmNUTAAAAAEAAAAQAAAAEAAAAAAAAAAAAB4D6AIB52fclgAAACpmZEFUAAAAAjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9WF%2Bu8QAAABpmY1RMAAAAAwAAABAAAAAQAAAAAAAAAAAAHgPoAgEK8Q9%2FAAAAFmZkQVQAAAAEOI1jYBgFo2AUjAIIAAAEEAAB0xIn4wAAABpmY1RMAAAABQAAABAAAAAQAAAAAAAAAAAAHgPoAgHnO30FAAAAQGZkQVQAAAAGOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVfozYcAAAABpmY1RMAAAABwAAABAAAAAQAAAAAAAAAAAAHgPoAgEKra7sAAAAFmZkQVQAAAAIOI1jYBgFo2AUjAIIAAAEEAABM9s3hAAAABpmY1RMAAAACQAAABAAAAAQAAAAAAAAAAAAHgPoAgHn3p%2BwAAAAKmZkQVQAAAAKOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F1BhPl6AAAAGmZjVEwAAAALAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQpITFkAAAAWZmRBVAAAAAw4jWNrgAWjYBSMArgAAAQQAAHaszpmAAAAGmZjVEwAAAANAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeeCPiMAAABAZmRBVAAAAA44jWNrgJ5gpxrDf2LEcIL%2FpzAVYxPDavP%2FUwz%2FpW79%2F%2F%2F%2FFMP%2FnWoQjC5GOxcgu4QYsVEwCmAAAOE0KxUmBL0KAAAAGmZjVEwAAAAPAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQoU7coAAAAWZmRBVAAAABA4jWNrgAWjYBSMArgAAAQQAAEpOBELAAAAGmZjVEwAAAARAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeYVWtoAAAAqZmRBVAAAABI4jWNrgAVYQXNz839ixHBq3qnG8B9ZAzYx2rlgFIwCcgAA8psX%2FWvpAecAAAAaZmNUTAAAABMAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC4OJMwAAABZmZEFUAAAAFDiNY2AYBaNgFIwCCAAABBAAAcBQHOkAAAAaZmNUTAAAABUAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5kn7SQAAAEBmZEFUAAAAFjiNY2AYnmCnGsN%2FYsRwgv%2BnMBVjE8Nq8%2F9TDP%2Blbv3%2F%2F%2F8Uw%2F%2BdahCMLkY7FyC7hBixUTAKYAAA4TQrFc%2BcEoQAAAAaZmNUTAAAABcAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC98ooAAAABZmZEFUAAAAGDiNY2AYBaNgFIwCCAAABBAAASCZDI4AAAAaZmNUTAAAABkAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5qwZ%2FAAAACpmZEFUAAAAGjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9cjJWbAAAABpmY1RMAAAAGwAAABAAAAAQAAAAAAAAAAAAHgPoAgELOsoVAAAAFmZkQVQAAAAcOI1jYBgFo2AUjAIIAAAEEAAByfEBbAAAABpmY1RMAAAAHQAAABAAAAAQAAAAAAAAAAAAHgPoAgHm8LhvAAAAQGZkQVQAAAAeOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVlxR3%2FgAAABpmY1RMAAAAHwAAABAAAAAQAAAAAAAAAAAAHgPoAgELZmuGAAAAFmZkQVQAAAAgOI1jYBgFo2AUjAIIAAAEEAABHP5cFQAAABpmY1RMAAAAIQAAABAAAAAQAAAAAAAAAAAAHgPoAgHlgtAOAAAAKmZkQVQAAAAiOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F0%2FMvDdAAAAAElFTkSuQmCC"/> | [ ] <link rel="icon" type="image/png" id="favicon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACGFjVEwAAAASAAAAAJNtBPIAAAAaZmNUTAAAAAAAAAAQAAAAEAAAAAAAAAAALuAD6AABhIDeugAAALhJREFUOI2Nk8sNxCAMRDlGohauXFOMpfTiAlxICqAELltHLqlgctg1InzMRhpFAc%2BLGWTnmoeZYamt78zXdZmaQtQMADlnU0OIAlbmJUBEcO4bRKQY2rUXIPmAGnDuG%2FBx3%2FfvOPVaDUg%2BoAPUf1PArIMCSD5glMEsUGaG%2BkyAFWIBaCsKuA%2BHGCNijLgP133XgOEtaPFMy2vUolEGJoCIzBmoRUR9%2B7rxj16DZaW%2FmgtmxnJ8V3oAnApQwNS5zpcAAAAaZmNUTAAAAAEAAAAQAAAAEAAAAAAAAAAAAB4D6AIB52fclgAAACpmZEFUAAAAAjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9WF%2Bu8QAAABpmY1RMAAAAAwAAABAAAAAQAAAAAAAAAAAAHgPoAgEK8Q9%2FAAAAFmZkQVQAAAAEOI1jYBgFo2AUjAIIAAAEEAAB0xIn4wAAABpmY1RMAAAABQAAABAAAAAQAAAAAAAAAAAAHgPoAgHnO30FAAAAQGZkQVQAAAAGOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVfozYcAAAABpmY1RMAAAABwAAABAAAAAQAAAAAAAAAAAAHgPoAgEKra7sAAAAFmZkQVQAAAAIOI1jYBgFo2AUjAIIAAAEEAABM9s3hAAAABpmY1RMAAAACQAAABAAAAAQAAAAAAAAAAAAHgPoAgHn3p%2BwAAAAKmZkQVQAAAAKOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F1BhPl6AAAAGmZjVEwAAAALAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQpITFkAAAAWZmRBVAAAAAw4jWNrgAWjYBSMArgAAAQQAAHaszpmAAAAGmZjVEwAAAANAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeeCPiMAAABAZmRBVAAAAA44jWNrgJ5gpxrDf2LEcIL%2FpzAVYxPDavP%2FUwz%2FpW79%2F%2F%2F%2FFMP%2FnWoQjC5GOxcgu4QYsVEwCmAAAOE0KxUmBL0KAAAAGmZjVEwAAAAPAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAQoU7coAAAAWZmRBVAAAABA4jWNrgAWjYBSMArgAAAQQAAEpOBELAAAAGmZjVEwAAAARAAAAEAAAABAAAAAAAAAAAAAeA%2BgCAeYVWtoAAAAqZmRBVAAAABI4jWNrgAVYQXNz839ixHBq3qnG8B9ZAzYx2rlgFIwCcgAA8psX%2FWvpAecAAAAaZmNUTAAAABMAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC4OJMwAAABZmZEFUAAAAFDiNY2AYBaNgFIwCCAAABBAAAcBQHOkAAAAaZmNUTAAAABUAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5kn7SQAAAEBmZEFUAAAAFjiNY2AYnmCnGsN%2FYsRwgv%2BnMBVjE8Nq8%2F9TDP%2Blbv3%2F%2F%2F8Uw%2F%2BdahCMLkY7FyC7hBixUTAKYAAA4TQrFc%2BcEoQAAAAaZmNUTAAAABcAAAAQAAAAEAAAAAAAAAAAAB4D6AIBC98ooAAAABZmZEFUAAAAGDiNY2AYBaNgFIwCCAAABBAAASCZDI4AAAAaZmNUTAAAABkAAAAQAAAAEAAAAAAAAAAAAB4D6AIB5qwZ%2FAAAACpmZEFUAAAAGjiNY2AYBVhBc3Pzf2LEcGreqcbwH1kDNjHauWAUjAJyAADymxf9cjJWbAAAABpmY1RMAAAAGwAAABAAAAAQAAAAAAAAAAAAHgPoAgELOsoVAAAAFmZkQVQAAAAcOI1jYBgFo2AUjAIIAAAEEAAByfEBbAAAABpmY1RMAAAAHQAAABAAAAAQAAAAAAAAAAAAHgPoAgHm8LhvAAAAQGZkQVQAAAAeOI1jYBieYKcaw39ixHCC%2F6cwFWMTw2rz%2F1MM%2F6Vu%2Ff%2F%2F%2FxTD%2F51qEIwuRjsXILuEGLFRMApgAADhNCsVlxR3%2FgAAABpmY1RMAAAAHwAAABAAAAAQAAAAAAAAAAAAHgPoAgELZmuGAAAAFmZkQVQAAAAgOI1jYBgFo2AUjAIIAAAEEAABHP5cFQAAABpmY1RMAAAAIQAAABAAAAAQAAAAAAAAAAAAHgPoAgHlgtAOAAAAKmZkQVQAAAAiOI1jYBgFWEFzc%2FN%2FYsRwat6pxvAfWQM2Mdq5YBSMAnIAAPKbF%2F0%2FMvDdAAAAAElFTkSuQmCC"/> |
11 | 16 | [ ] Add key form may be joined with list keys command! | [ ] Add key form may be joined with list keys command! |
46 | 51 | [ ] Maybe we should mark the repository as dirty, only in the post-receive hook? Or update is the best place? | [ ] Maybe we should mark the repository as dirty, only in the post-receive hook? Or update is the best place? |
47 | 52 | [ ] Limit number of commits per push. | [ ] Limit number of commits per push. |
48 | 53 | [ ] logrotate | [ ] logrotate |
49 | [ ] | ||
54 | [ ] In %post section we may want to run a script that will do the update of the | ||
55 | database, for example. | ||
56 | [ ] Compute disk_used_mb per user. | ||
57 | [ ] Enforce disk quota. | ||
58 | [ ] |
File admin/init.php changed (mode: 100644) (index 53c015c..7b21afd) | |||
... | ... | rg_log_set_file("init.log"); | |
16 | 16 | ||
17 | 17 | $db = rg_sql_open($rg_db); | $db = rg_sql_open($rg_db); |
18 | 18 | if ($db === FALSE) { | if ($db === FALSE) { |
19 | echo "Internal error (" . rg_sql_error() . ")!"; | ||
19 | echo "Internal error (" . rg_sql_error() . ")!\n"; | ||
20 | 20 | exit(1); | exit(1); |
21 | 21 | } | } |
22 | 22 | ||
... | ... | $disk_quota_mb = 0; | |
32 | 32 | $rights = rg_rights_all("user"); | $rights = rg_rights_all("user"); |
33 | 33 | $user = "admin"; | $user = "admin"; |
34 | 34 | $email = ""; | $email = ""; |
35 | $session_time = 3600; | ||
35 | 36 | while (1) { | while (1) { |
36 | 37 | $user0 = readline("User [$user]: "); | $user0 = readline("User [$user]: "); |
37 | 38 | if (!empty($user0)) | if (!empty($user0)) |
... | ... | while (1) { | |
60 | 61 | } | } |
61 | 62 | ||
62 | 63 | $r = rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, | $r = rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, |
63 | $disk_quota_mb, $rights); | ||
64 | $disk_quota_mb, $rights, $session_time); | ||
64 | 65 | if ($r !== TRUE) { | if ($r !== TRUE) { |
65 | 66 | echo "Cannot create user (" . rg_user_error() . ")!\n"; | echo "Cannot create user (" . rg_user_error() . ")!\n"; |
66 | 67 | continue; | continue; |
File duilder changed (mode: 100755) (index a15834c..dbdd391) | |||
... | ... | function duilder_srpm() | |
179 | 179 | rpmbuild -ts "${P}.tar.gz" | rpmbuild -ts "${P}.tar.gz" |
180 | 180 | echo | echo |
181 | 181 | ||
182 | PKG="${RPMBUILD}/SRPMS/${P}-1.src.rpm" | ||
182 | PKG="${RPMBUILD}/SRPMS/${P}-${REV}.src.rpm" | ||
183 | 183 | ||
184 | 184 | # Run a rpmlint on it | # Run a rpmlint on it |
185 | 185 | if [ -x /usr/bin/rpmlint ]; then | if [ -x /usr/bin/rpmlint ]; then |
File duilder.conf changed (mode: 100644) (index 76d9310..50711fc) | |||
1 | 1 | PRJ="rocketgit" | PRJ="rocketgit" |
2 | VER="0.3" | ||
2 | VER="0.6" | ||
3 | 3 | REV="1" | REV="1" |
4 | 4 | EXCLUDE=".exclude" | EXCLUDE=".exclude" |
5 | 5 | EXPORT_PATH="/data/www/umbrella/kernel/us/rocketgit" | EXPORT_PATH="/data/www/umbrella/kernel/us/rocketgit" |
File hooks/update changed (mode: 100755) (index e86a3d8..976b872) | |||
1 | 1 | #!/usr/bin/php | #!/usr/bin/php |
2 | 2 | <?php | <?php |
3 | 3 | // This is called by 'update' hook | // This is called by 'update' hook |
4 | // Inspired by upate.sample in git package | ||
4 | // Inspired by update.sample in git package | ||
5 | 5 | error_reporting(E_ALL); | error_reporting(E_ALL); |
6 | 6 | ini_set("track_errors", "On"); | ini_set("track_errors", "On"); |
7 | 7 | ||
... | ... | rg_log("_SERVER: " . print_r($_SERVER, TRUE)); | |
22 | 22 | ||
23 | 23 | umask(0022); | umask(0022); |
24 | 24 | ||
25 | $refname = rg_git_ref(@$_SERVER['argv'][1]); | ||
26 | $old_rev = rg_git_ref(@$_SERVER['argv'][2]); | ||
27 | $new_rev = rg_git_ref(@$_SERVER['argv'][3]); | ||
25 | $refname = @$_SERVER['argv'][1]; | ||
26 | $old_rev = rg_git_rev(@$_SERVER['argv'][2]); | ||
27 | $new_rev = rg_git_rev(@$_SERVER['argv'][3]); | ||
28 | 28 | rg_log("refname=$refname old_rev=$old_rev new_rev=$new_rev."); | rg_log("refname=$refname old_rev=$old_rev new_rev=$new_rev."); |
29 | 29 | ||
30 | if ((empty($refname) || empty($old_rev) || empty($new_rev)) { | ||
30 | if (empty($refname) || empty($old_rev) || empty($new_rev)) { | ||
31 | 31 | echo "rg: Invalid parameters!\n"; | echo "rg: Invalid parameters!\n"; |
32 | 32 | exit(1); | exit(1); |
33 | 33 | } | } |
... | ... | if (strcmp($rg_repo_zero, $new_rev) == 0) | |
36 | 36 | $new_rev_type = "delete"; | $new_rev_type = "delete"; |
37 | 37 | else | else |
38 | 38 | $new_rev_type = rg_git_type($new_rev); | $new_rev_type = rg_git_type($new_rev); |
39 | rg_log("new_reg_type=$new_reg_type."); | ||
39 | rg_log("new_rev_type=$new_rev_type."); | ||
40 | 40 | ||
41 | 41 | if (strcmp($new_rev_type, "commit") == 0) { | if (strcmp($new_rev_type, "commit") == 0) { |
42 | rg_log("It's a commit..."); | ||
42 | 43 | if (strncmp($refname, "refs/tags/", 10) == 0) { | if (strncmp($refname, "refs/tags/", 10) == 0) { |
43 | 44 | // This is an not annoted tag - we can reject it | // This is an not annoted tag - we can reject it |
44 | 45 | rg_log("Un-annotated tag..."); | rg_log("Un-annotated tag..."); |
45 | } | ||
46 | |||
47 | if (strncmp($refname, "refs/heads/", 11) == 0) { | ||
46 | } else if (strncmp($refname, "refs/heads/", 11) == 0) { | ||
48 | 47 | if (strcmp($old_rev, $rg_repo_zero) == 0) { | if (strcmp($old_rev, $rg_repo_zero) == 0) { |
49 | 48 | rg_log("Creating a branch..."); | rg_log("Creating a branch..."); |
50 | } | ||
51 | |||
52 | if (rg_git_ref_ok($new_ref . "^2")) { | ||
49 | } else if (rg_git_rev_ok($new_rev . "^2")) { | ||
53 | 50 | rg_log("Merge commit..."); | rg_log("Merge commit..."); |
54 | } | ||
55 | |||
56 | if (rg_git_bad_whitespace($old_ref, $new_ref)) { | ||
57 | rg_log("Bad whitespace..."); | ||
51 | } else { | ||
52 | rg_log("Normal commit..."); | ||
53 | if (!rg_git_whitespace_ok($old_rev, $new_rev)) { | ||
54 | rg_log("Bad whitespace..."); | ||
55 | } | ||
58 | 56 | } | } |
59 | 57 | } | } |
60 | 58 | ||
61 | 59 | // refs/remotes/* | // refs/remotes/* |
62 | 60 | } else if (strcmp($new_rev_type, "delete") == 0) { | } else if (strcmp($new_rev_type, "delete") == 0) { |
61 | rg_log("It's a delete..."); | ||
63 | 62 | if (strncmp($refname, "refs/tags/", 10) == 0) { | if (strncmp($refname, "refs/tags/", 10) == 0) { |
64 | 63 | rg_log("Deleting a tag..."); | rg_log("Deleting a tag..."); |
65 | } | ||
66 | |||
67 | if (strncmp($refname, "refs/heads/", 11) == 0) { | ||
64 | } else if (strncmp($refname, "refs/heads/", 11) == 0) { | ||
68 | 65 | rg_log("Deleting a branch..."); | rg_log("Deleting a branch..."); |
69 | } | ||
70 | |||
71 | if (strncmp($refname, "refs/remotes/", 13) == 0) { | ||
66 | } else if (strncmp($refname, "refs/remotes/", 13) == 0) { | ||
72 | 67 | rg_log("Deleting a tracking branch..."); | rg_log("Deleting a tracking branch..."); |
73 | 68 | } | } |
74 | 69 | } else if (strcmp($new_rev_type, "tag") == 0) { | } else if (strcmp($new_rev_type, "tag") == 0) { |
70 | rg_log("It's a tag..."); | ||
75 | 71 | if (strncmp($refname, "refs/tags/", 10) == 0) { | if (strncmp($refname, "refs/tags/", 10) == 0) { |
76 | 72 | rg_log("Modify tag..."); | rg_log("Modify tag..."); |
77 | 73 | } | } |
... | ... | rg_log("Took " . $diff . "ms."); | |
88 | 84 | "repo: " . $repo . " ($repo_path)" | "repo: " . $repo . " ($repo_path)" |
89 | 85 | . "\nat: " . sprintf("%u", $_start) | . "\nat: " . sprintf("%u", $_start) |
90 | 86 | . "\nuid: " . $uid | . "\nuid: " . $uid |
91 | . "\ncmd: $refname $old_ref $new_ref" | ||
87 | . "\npara: $refname $old_rev $new_rev" | ||
92 | 88 | . "\nTook: " . $diff . "ms"); | . "\nTook: " . $diff . "ms"); |
93 | 89 | ||
94 | 90 | // Mark repository dirty for disk statistics and other stuff | // Mark repository dirty for disk statistics and other stuff |
File inc/admin/users/add.php changed (mode: 100644) (index 2619c7b..34a9bd7) | |||
... | ... | if ($doit == 1) { | |
15 | 15 | $is_admin = rg_var_uint("is_admin"); | $is_admin = rg_var_uint("is_admin"); |
16 | 16 | $disk_quota_mb = rg_var_uint("disk_quota_mb"); | $disk_quota_mb = rg_var_uint("disk_quota_mb"); |
17 | 17 | $rights = @rg_rights_a2s($_REQUEST['rights']); | $rights = @rg_rights_a2s($_REQUEST['rights']); |
18 | $session_time = rg_var_uint("session_time"); | ||
18 | 19 | ||
19 | 20 | $_ui = rg_user_info($db, 0, $xuser, ""); | $_ui = rg_user_info($db, 0, $xuser, ""); |
20 | 21 | if ($_ui['ok'] == 0) { | if ($_ui['ok'] == 0) { |
21 | 22 | $_user_add .= "Error: Internal error!"; | $_user_add .= "Error: Internal error!"; |
22 | 23 | } else if ($_ui['exists'] == 0) { | } else if ($_ui['exists'] == 0) { |
23 | 24 | if (rg_user_edit($db, 0, $xuser, $email, $xpass, $is_admin, | if (rg_user_edit($db, 0, $xuser, $email, $xpass, $is_admin, |
24 | $disk_quota_mb, $rights)) { | ||
25 | $disk_quota_mb, $rights, $session_time)) { | ||
25 | 26 | $_user_add .= "OK!<br />"; | $_user_add .= "OK!<br />"; |
26 | 27 | } | } |
27 | 28 | } else { | } else { |
... | ... | if ($doit == 1) { | |
35 | 36 | $is_admin = 0; | $is_admin = 0; |
36 | 37 | $disk_quota_mb = 0; | $disk_quota_mb = 0; |
37 | 38 | $rights = ""; | $rights = ""; |
39 | $session_time = $rg_session_time; | ||
38 | 40 | } | } |
39 | 41 | ||
40 | 42 | $uid = 0; | $uid = 0; |
41 | 43 | ||
44 | $user_form_add = 1; | ||
42 | 45 | include($INC . "/admin/users/user.form.php"); | include($INC . "/admin/users/user.form.php"); |
43 | 46 | $_user_add .= $_form; | $_user_add .= $_form; |
44 | 47 |
File inc/admin/users/edit.php changed (mode: 100644) (index cd62055..da77793) | |||
... | ... | if ($doit == 1) { | |
18 | 18 | $is_admin = rg_var_uint("is_admin"); | $is_admin = rg_var_uint("is_admin"); |
19 | 19 | $disk_quota_mb = rg_var_uint("disk_quota_mb"); | $disk_quota_mb = rg_var_uint("disk_quota_mb"); |
20 | 20 | $rights = @rg_rights_a2s($_REQUEST['rights']); | $rights = @rg_rights_a2s($_REQUEST['rights']); |
21 | $session_time = rg_var_uint("session_time"); | ||
21 | 22 | ||
22 | 23 | $_ui = rg_user_info($db, 0, $xuser, ""); | $_ui = rg_user_info($db, 0, $xuser, ""); |
23 | 24 | if ($_ui['ok'] == 0) { | if ($_ui['ok'] == 0) { |
... | ... | if ($doit == 1) { | |
27 | 28 | $_user_edit .= "Error: User does not exists!"; | $_user_edit .= "Error: User does not exists!"; |
28 | 29 | } else { | } else { |
29 | 30 | if (rg_user_edit($db, $uid, $xuser, $email, $xpass, | if (rg_user_edit($db, $uid, $xuser, $email, $xpass, |
30 | $is_admin, $disk_quota_mb, $rights)) { | ||
31 | $is_admin, $disk_quota_mb, $rights, $session_time)) { | ||
31 | 32 | $_user_edit .= "OK!<br />"; | $_user_edit .= "OK!<br />"; |
32 | 33 | } | } |
33 | 34 | } | } |
... | ... | if ($doit == 1) { | |
38 | 39 | if ($_ui['ok'] == 0) { | if ($_ui['ok'] == 0) { |
39 | 40 | $_user_edit .= "Error: Internal error!"; | $_user_edit .= "Error: Internal error!"; |
40 | 41 | } else if ($_ui['exists'] == 0) { | } else if ($_ui['exists'] == 0) { |
41 | $_user_edit .= "User does not exists!<br />"; | ||
42 | $_user_edit .= "User does not exist!<br />"; | ||
42 | 43 | } else { | } else { |
43 | 44 | $xuser = $_ui['username']; | $xuser = $_ui['username']; |
44 | 45 | $email = $_ui['email']; | $email = $_ui['email']; |
... | ... | if ($doit == 1) { | |
50 | 51 | } | } |
51 | 52 | } | } |
52 | 53 | ||
54 | $user_form_add = 1; | ||
53 | 55 | include($INC . "/admin/users/user.form.php"); | include($INC . "/admin/users/user.form.php"); |
54 | 56 | $_user_edit .= $_form; | $_user_edit .= $_form; |
55 | 57 |
File inc/admin/users/user.form.php changed (mode: 100644) (index b973195..6a0d1b2) | |||
1 | 1 | <?php | <?php |
2 | 2 | ||
3 | $sel_is_admin = array(0 => "", 1 => ""); | ||
4 | $sel_is_admin[$is_admin] = " selected=\"selected\""; | ||
5 | |||
3 | 6 | $_form = ' | $_form = ' |
4 | 7 | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> |
5 | 8 | <input type="hidden" name="op" value="' . $op . '"> | <input type="hidden" name="op" value="' . $op . '"> |
... | ... | $_form = ' | |
19 | 22 | <td>E-mail:</td> | <td>E-mail:</td> |
20 | 23 | <td><input type="text" name="email" value="' . $email . '"/></td> | <td><input type="text" name="email" value="' . $email . '"/></td> |
21 | 24 | </tr> | </tr> |
25 | '; | ||
22 | 26 | ||
27 | if ($user_form_add == 1) { | ||
28 | $_form .= ' | ||
23 | 29 | <tr> | <tr> |
24 | 30 | <td>Password:</td> | <td>Password:</td> |
25 | 31 | <td><input type="password" name="xpass" value="' . $xpass . '"/></td> | <td><input type="password" name="xpass" value="' . $xpass . '"/></td> |
26 | 32 | </tr> | </tr> |
27 | '; | ||
28 | 33 | ||
29 | if ($rg_ui['is_admin'] == 1) { | ||
30 | $_form .= ' | ||
31 | 34 | <tr> | <tr> |
32 | 35 | <td>Admin?</td> | <td>Admin?</td> |
33 | 36 | <td> | <td> |
34 | 37 | <select name="is_admin"> | <select name="is_admin"> |
35 | <option value="0">No</option> | ||
36 | <option value="1">Yes</option> | ||
38 | <option value="0"' . $sel_is_admin[0] . '>No</option> | ||
39 | <option value="1"' . $sel_is_admin[1] . '>Yes</option> | ||
37 | 40 | </select> | </select> |
38 | 41 | </td> | </td> |
39 | 42 | </tr> | </tr> |
... | ... | $_form .= ' | |
52 | 55 | ||
53 | 56 | $_form .= ' | $_form .= ' |
54 | 57 | <tr> | <tr> |
55 | <td colspan="2"><input type="submit" value="Go!"/></td> | ||
58 | <td>Preferred session time (in seconds):</td> | ||
59 | <td><input type="text" name="session_time" value="' . $session_time . '"/></td> | ||
60 | </tr> | ||
61 | |||
62 | <tr> | ||
63 | <td colspan="2" align="center"><input type="submit" value="Go!"/></td> | ||
56 | 64 | </tr> | </tr> |
57 | 65 | </table> | </table> |
58 | 66 | </form> | </form> |
File inc/db.inc.php changed (mode: 100644) (index c549c4a..8fbb4e8) | |||
... | ... | function rg_sql_query($db, $sql) | |
60 | 60 | { | { |
61 | 61 | global $rg_sql_debug; | global $rg_sql_debug; |
62 | 62 | ||
63 | if ($rg_sql_debug > 0) | ||
64 | rg_log("DB: running [$sql]..."); | ||
63 | if ($rg_sql_debug > 0) { | ||
64 | rg_log("\tDB: running [$sql]..."); | ||
65 | $_s = microtime(TRUE); | ||
66 | } | ||
65 | 67 | ||
66 | 68 | $res = @pg_query($db, $sql); | $res = @pg_query($db, $sql); |
67 | 69 | if ($res === FALSE) { | if ($res === FALSE) { |
... | ... | function rg_sql_query($db, $sql) | |
69 | 71 | return FALSE; | return FALSE; |
70 | 72 | } | } |
71 | 73 | ||
74 | if ($rg_sql_debug > 0) { | ||
75 | $diff = sprintf("%u", (microtime(TRUE) - $_s) * 1000); | ||
76 | $rows = rg_sql_num_rows($res); | ||
77 | $arows = rg_sql_affected_rows($res); | ||
78 | rg_log("\tDB: Took " . $diff . "ms, $rows row(s), $arows affected"); | ||
79 | } | ||
80 | |||
72 | 81 | return $res; | return $res; |
73 | 82 | } | } |
74 | 83 | ||
... | ... | function rg_sql_num_rows($res) | |
113 | 122 | return pg_num_rows($res); | return pg_num_rows($res); |
114 | 123 | } | } |
115 | 124 | ||
125 | function rg_sql_affected_rows($res) | ||
126 | { | ||
127 | return pg_affected_rows($res); | ||
128 | } | ||
129 | |||
116 | 130 | ?> | ?> |
File inc/db/struct.inc.php changed (mode: 100644) (index a5dc4bd..e47ced6) | |||
... | ... | $rg_db_struct[0] = array( | |
7 | 7 | . ", name TEXT UNIQUE NOT NULL" | . ", name TEXT UNIQUE NOT NULL" |
8 | 8 | . ", uid INTEGER NOT NULL" | . ", uid INTEGER NOT NULL" |
9 | 9 | . ", itime INTEGER NOT NULL" | . ", itime INTEGER NOT NULL" |
10 | . ", disk_quota_mb INTEGER NOT NULL" | ||
11 | . ", max_commit_size INTEGER NOT NULL" | ||
12 | . ", master INTEGER NOT NULL" | ||
13 | . ", description TEXT NOT NULL" | ||
14 | . ", git_dir_done INTEGER NOT NULL" | ||
15 | . ", default_rights TEXT NOT NULL" | ||
16 | . ", deleted INTEGER NOT NULL" | ||
17 | . ", max_users INTEGER NOT NULL" | ||
10 | . ", disk_quota_mb INTEGER DEFAULT 0" | ||
11 | . ", disk_used_mb INTEGER NOT NULL DEFAULT 0" | ||
12 | . ", max_commit_size INTEGER DEFAULT 0" | ||
13 | . ", master INTEGER NOT NULL DEFAULT 0" | ||
14 | . ", description TEXT NOT NULL DEFAULT ''" | ||
15 | . ", git_dir_done INTEGER NOT NULL DEFAULT 0" | ||
16 | . ", default_rights TEXT NOT NULL DEFAULT ''" | ||
17 | . ", deleted INTEGER NOT NULL DEFAULT 0" | ||
18 | . ", max_users INTEGER NOT NULL DEFAULT 0" | ||
18 | 19 | . ")", | . ")", |
19 | 20 | "rights" => "CREATE TABLE rights" | "rights" => "CREATE TABLE rights" |
20 | 21 | . " (type TEXT NOT NULL" | . " (type TEXT NOT NULL" |
... | ... | $rg_db_struct[0] = array( | |
29 | 30 | . " (key_id SERIAL PRIMARY KEY" | . " (key_id SERIAL PRIMARY KEY" |
30 | 31 | . ", itime INTEGER NOT NULL" | . ", itime INTEGER NOT NULL" |
31 | 32 | . ", uid INTEGER NOT NULL" | . ", uid INTEGER NOT NULL" |
32 | . ", key TEXT NOT NULL)", | ||
33 | . ", key TEXT UNIQUE NOT NULL)", | ||
33 | 34 | "users" => "CREATE TABLE users" | "users" => "CREATE TABLE users" |
34 | 35 | . " (uid SERIAL PRIMARY KEY" | . " (uid SERIAL PRIMARY KEY" |
35 | 36 | . ", username TEXT UNIQUE NOT NULL" | . ", username TEXT UNIQUE NOT NULL" |
... | ... | $rg_db_struct[0] = array( | |
37 | 38 | . ", pass TEXT NOT NULL" | . ", pass TEXT NOT NULL" |
38 | 39 | . ", email TEXT NOT NULL" | . ", email TEXT NOT NULL" |
39 | 40 | . ", itime INTEGER NOT NULL" | . ", itime INTEGER NOT NULL" |
40 | . ", suspended INTEGER NOT NULL" | ||
41 | . ", session_time INTEGER DEFAULT 3600 NOT NULL" | ||
42 | . ", last_seen INTEGER NOT NULL" | ||
43 | . ", is_admin INTEGER NOT NULL" | ||
44 | . ", disk_quota_mb INTEGER NOT NULL" | ||
45 | . ", disk_mb INTEGER NOT NULL" | ||
41 | . ", suspended INTEGER NOT NULL DEFAULT 0" | ||
42 | . ", session_time INTEGER NOT NULL DEFAULT 3600" | ||
43 | . ", last_seen INTEGER NOT NULL DEFAULT 0" | ||
44 | . ", is_admin INTEGER NOT NULL DEFAULT 0" | ||
45 | . ", disk_quota_mb INTEGER NOT NULL DEFAULT 0" | ||
46 | . ", disk_used_mb INTEGER NOT NULL DEFAULT 0" | ||
46 | 47 | . ", rights TEXT NOT NULL" | . ", rights TEXT NOT NULL" |
47 | 48 | . ")", | . ")", |
48 | 49 | "sess" => "CREATE TABLE sess" | "sess" => "CREATE TABLE sess" |
File inc/dispatch/dispatch.php changed (mode: 100644) (index b369a1f..3e3586f) | |||
... | ... | case 'keys': | |
42 | 42 | $body .= $_keys; | $body .= $_keys; |
43 | 43 | break; | break; |
44 | 44 | ||
45 | case 'forgotlink': // forgot pass link | ||
45 | case 'forgot_link': // forgot pass link | ||
46 | 46 | include($INC . "/user/forgot.php"); | include($INC . "/user/forgot.php"); |
47 | 47 | $body .= $_forgot; | $body .= $_forgot; |
48 | 48 | break; | break; |
49 | 49 | ||
50 | case 'forgotmail': // forgot pass - send mail | ||
51 | include($INC . "/user/forgot_mail.php"); | ||
50 | case 'forgot_send': // forgot pass - send mail | ||
51 | include($INC . "/user/forgot_send.php"); | ||
52 | 52 | $body .= $_forgot; | $body .= $_forgot; |
53 | 53 | break; | break; |
54 | 54 | ||
... | ... | case 'personal': | |
61 | 61 | include($INC . "/personal/personal.php"); | include($INC . "/personal/personal.php"); |
62 | 62 | $body .= $_personal; | $body .= $_personal; |
63 | 63 | break; | break; |
64 | |||
65 | default: | ||
66 | rg_log("Invalid operation!"); | ||
64 | 67 | } | } |
65 | 68 | ||
66 | 69 | $op = $new_op; | $op = $new_op; |
67 | rg_log("new op=$op."); | ||
70 | if (!empty($op)) | ||
71 | rg_log("new op=$op."); | ||
68 | 72 | ?> | ?> |
File inc/git.inc.php changed (mode: 100644) (index d5e14df..8acf049) | |||
... | ... | function rg_git_error() | |
20 | 20 | ||
21 | 21 | function rg_git_install_hooks($dst) | function rg_git_install_hooks($dst) |
22 | 22 | { | { |
23 | global $rg_scripts; | ||
24 | |||
23 | 25 | rg_log("git_install_hooks: dst=$dst..."); | rg_log("git_install_hooks: dst=$dst..."); |
24 | 26 | ||
25 | rg_log("\tNot yet implemented!"); | ||
27 | if (file_exists($dst . "/hooks")) { | ||
28 | //rg_log("hooks folder exists..."); | ||
29 | $_dir = @readlink($dst . "/hooks"); | ||
30 | if ($_dir !== FALSE) { | ||
31 | //rg_log("\treadlink returned=[$_dir]"); | ||
32 | if (strcmp($_dir, $rg_scripts . "/hooks") == 0) | ||
33 | return TRUE; | ||
34 | } | ||
35 | |||
36 | rg_log("\tNot a link to scripts one, make it..."); | ||
37 | if (!rg_rmdir($dst . "/hooks")) { | ||
38 | rg_git_set_error("cannot remove hooks dir ($php_errormsg)"); | ||
39 | return FALSE; | ||
40 | } | ||
41 | } | ||
42 | |||
43 | if (!@symlink($rg_scripts . "/hooks", $dst . "/hooks")) { | ||
44 | rg_git_set_error("cannot make symlink [$rg_scripts/hooks]" | ||
45 | . "->[$dst/] ($php_errormsg)."); | ||
46 | return FALSE; | ||
47 | } | ||
48 | |||
26 | 49 | return TRUE; | return TRUE; |
27 | 50 | } | } |
28 | 51 | ||
... | ... | function rg_git_init($dst) | |
34 | 57 | if (!file_exists($dir)) { | if (!file_exists($dir)) { |
35 | 58 | $r = @mkdir($dir, 0755, TRUE); | $r = @mkdir($dir, 0755, TRUE); |
36 | 59 | if ($r === FALSE) { | if ($r === FALSE) { |
37 | rg_log("\tCannot create dir [$dir] ($php_errormsg)!"); | ||
60 | rg_git_set_error("cannot create dir [$dir] ($php_errormsg)"); | ||
38 | 61 | return FALSE; | return FALSE; |
39 | 62 | } | } |
40 | 63 | } | } |
41 | 64 | ||
42 | if (file_exists($dst . "/rocketgit")) { | ||
43 | rg_log("\tGit repo was created OK. Skip cloning."); | ||
44 | } else { | ||
65 | if (!file_exists($dst . "/rocketgit")) { | ||
45 | 66 | $cmd = "git init --bare '" . escapeshellcmd($dst) . "'"; | $cmd = "git init --bare '" . escapeshellcmd($dst) . "'"; |
46 | 67 | rg_log("\texec $cmd..."); | rg_log("\texec $cmd..."); |
47 | 68 | $a = exec($cmd, $output, $err); | $a = exec($cmd, $output, $err); |
48 | 69 | if ($err != 0) { | if ($err != 0) { |
49 | rg_log("\tError $err (" . implode("|", $output) . " ($a)!"); | ||
70 | rg_git_set_error("crror $err (" . implode("|", $output) . " ($a)"); | ||
50 | 71 | return FALSE; | return FALSE; |
51 | 72 | } | } |
52 | 73 | ||
53 | 74 | if (!@mkdir($dst . "/rocketgit")) { | if (!@mkdir($dst . "/rocketgit")) { |
54 | rg_log("\tCannot create '$dst/rocketgit' dir ($php_errormsg)!"); | ||
75 | rg_git_set_error("cannot create '$dst/rocketgit' dir ($php_errormsg)"); | ||
55 | 76 | return FALSE; | return FALSE; |
56 | 77 | } | } |
57 | 78 | } | } |
58 | 79 | ||
59 | if (rg_git_install_hooks($dst) === FALSE) | ||
80 | if (rg_git_install_hooks($dst) !== TRUE) | ||
60 | 81 | return FALSE; | return FALSE; |
61 | 82 | ||
62 | 83 | return TRUE; | return TRUE; |
... | ... | function rg_git_clone($src, $dst) | |
70 | 91 | if (!file_exists($dir)) { | if (!file_exists($dir)) { |
71 | 92 | $r = @mkdir($dir, 0755, TRUE); | $r = @mkdir($dir, 0755, TRUE); |
72 | 93 | if ($r === FALSE) { | if ($r === FALSE) { |
73 | rg_log("\tCannot create dir [$dir] ($php_errormsg)!"); | ||
94 | rg_git_set_error("cannot create dir [$dir] ($php_errormsg)"); | ||
74 | 95 | return FALSE; | return FALSE; |
75 | 96 | } | } |
76 | 97 | } | } |
77 | 98 | ||
78 | if (file_exists($dst . "/rocketgit")) { | ||
79 | rg_log("\tGit repo was created OK. Skip cloning."); | ||
80 | } else { | ||
99 | if (!file_exists($dst . "/rocketgit")) { | ||
81 | 100 | $cmd = "git clone --bare '" . escapeshellcmd($src) . "'" | $cmd = "git clone --bare '" . escapeshellcmd($src) . "'" |
82 | 101 | . " '" . escapeshellcmd($dst) . "'"; | . " '" . escapeshellcmd($dst) . "'"; |
83 | 102 | rg_log("\texec $cmd..."); | rg_log("\texec $cmd..."); |
84 | 103 | $a = exec($cmd); | $a = exec($cmd); |
85 | 104 | if ($err != 0) { | if ($err != 0) { |
86 | rg_log("\tError $err (" . implode("|", $output) . " ($a)!"); | ||
105 | rg_git_set_error("error $err (" . implode("|", $output) . " ($a)"); | ||
87 | 106 | return FALSE; | return FALSE; |
88 | 107 | } | } |
89 | 108 | ||
90 | if (!@mkdir($dst . "/rocketgit")) { | ||
91 | rg_log("\tCannot create '$dst/rocketgit' dir ($php_errormsg)!"); | ||
109 | if (!@mkdir($dst . "/rocketgit", 0700)) { | ||
110 | rg_git_set_error("cannot create '$dst/rocketgit' dir ($php_errormsg)"); | ||
92 | 111 | return FALSE; | return FALSE; |
93 | 112 | } | } |
94 | 113 | } | } |
95 | 114 | ||
96 | if (rg_git_install_hooks($dst) === FALSE) | ||
115 | if (rg_git_install_hooks($dst) !== TRUE) | ||
97 | 116 | return FALSE; | return FALSE; |
98 | 117 | ||
99 | 118 | return TRUE; | return TRUE; |
... | ... | function rg_git_clone($src, $dst) | |
104 | 123 | */ | */ |
105 | 124 | function rg_git_type($obj) | function rg_git_type($obj) |
106 | 125 | { | { |
107 | $cmd = "git cat-file -t '" . escapeshellcmd($obj) . "'"; | ||
126 | $cmd = "git cat-file -t '" . $obj . "'"; | ||
108 | 127 | rg_log("\texec $cmd..."); | rg_log("\texec $cmd..."); |
109 | 128 | $a = exec($cmd, $output, $err); | $a = exec($cmd, $output, $err); |
110 | 129 | if ($err != 0) { | if ($err != 0) { |
111 | rg_log("\tError $err (" . implode("|", $output) . " ($a)!"); | ||
130 | rg_git_set_error("error $err (" . implode("|", $output) . " ($a)"); | ||
112 | 131 | return FALSE; | return FALSE; |
113 | 132 | } | } |
114 | 133 | ||
... | ... | function rg_git_type($obj) | |
116 | 135 | } | } |
117 | 136 | ||
118 | 137 | /* | /* |
119 | * Corrects a ref | ||
138 | * Corrects a revision | ||
120 | 139 | */ | */ |
121 | function rg_git_ref($s) | ||
140 | function rg_git_rev($rev) | ||
122 | 141 | { | { |
123 | return preg_replace("/[^a-zA-Z0-9^~]/", "", $s); | ||
142 | return preg_replace("/[^a-zA-Z0-9^~]/", "", $rev); | ||
124 | 143 | } | } |
125 | 144 | ||
126 | // Check a ref if is OK | ||
145 | // Check a revision if is OK | ||
127 | 146 | // TODO: Unit testing | // TODO: Unit testing |
128 | function rg_git_ref_ok($ref) | ||
147 | function rg_git_rev_ok($rev) | ||
129 | 148 | { | { |
130 | $cmd = "git rev-parse --verify --quiet " . escapeshellcmd($ref); | ||
149 | $cmd = "git rev-parse --verify --quiet '" . $rev . "'"; | ||
131 | 150 | rg_log("\texec $cmd..."); | rg_log("\texec $cmd..."); |
132 | $a = exec($cmd, $output, $err); | ||
151 | $a = @exec($cmd, $output, $err); | ||
133 | 152 | if ($err != 0) { | if ($err != 0) { |
134 | rg_log("\tError $err (" . implode("|", $output) . " ($a)!"); | ||
153 | rg_git_set_error("error $err out=[" . implode("|", $output) . "] a=[$a]"); | ||
135 | 154 | return FALSE; | return FALSE; |
136 | 155 | } | } |
137 | 156 | ||
138 | 157 | return TRUE; | return TRUE; |
139 | 158 | } | } |
140 | 159 | ||
141 | // returns TRUE if bad whitespace detected | ||
160 | // returns FALSE if bad whitespace detected | ||
142 | 161 | // TODO: Unit testing | // TODO: Unit testing |
143 | function rg_git_bad_whitespace($old, $new) | ||
162 | function rg_git_whitespace_ok($old, $new) | ||
144 | 163 | { | { |
145 | $cmd = "git diff --check --quiet " . escapeshellcmd($old) . " " | ||
146 | . escapeshellcmd($new); | ||
164 | $cmd = "git diff --check " . $old . " " . $new . ""; | ||
147 | 165 | rg_log("\texec $cmd..."); | rg_log("\texec $cmd..."); |
148 | $a = exec($cmd, $output, $err); | ||
166 | $a = @exec($cmd, $output, $err); | ||
149 | 167 | if ($err != 0) { | if ($err != 0) { |
150 | rg_log("\tError $err (" . implode("|", $output) . " ($a)!"); | ||
168 | rg_git_set_error("error $err out=[" . implode("|", $output) . "] a=[$a]"); | ||
151 | 169 | return FALSE; | return FALSE; |
152 | 170 | } | } |
153 | 171 |
File inc/keys.inc.php changed (mode: 100644) (index eea7b98..cc67061) | |||
... | ... | function rg_keys_regen($db) | |
123 | 123 | global $rg_ssh_paras; | global $rg_ssh_paras; |
124 | 124 | ||
125 | 125 | $dirty = rg_state_get($db, "authorized_keys"); | $dirty = rg_state_get($db, "authorized_keys"); |
126 | if ($dirty === 0) { | ||
126 | if ($dirty == 0) { | ||
127 | 127 | rg_log("Skip generation because is not dirty!"); | rg_log("Skip generation because is not dirty!"); |
128 | 128 | return TRUE; | return TRUE; |
129 | 129 | } | } |
... | ... | function rg_keys_regen($db) | |
159 | 159 | } | } |
160 | 160 | while (($row = rg_sql_fetch_array($res))) { | while (($row = rg_sql_fetch_array($res))) { |
161 | 161 | rg_log("Writing key [" . $row['key'] . "] for uid " . $row['uid']); | rg_log("Writing key [" . $row['key'] . "] for uid " . $row['uid']); |
162 | $buf = "command=\"/usr/bin/php " . $rg_scripts . "/ssh.php" | ||
162 | $buf = "command=\"/usr/bin/php " . $rg_scripts . "/remote.php" | ||
163 | 163 | . " " . $row['uid'] . "\"" | . " " . $row['uid'] . "\"" |
164 | 164 | . "," . $rg_ssh_paras | . "," . $rg_ssh_paras |
165 | 165 | . " " . $row['key'] . "\n"; | . " " . $row['key'] . "\n"; |
File inc/log.inc.php changed (mode: 100644) (index 4ecc45a..b8bdd47) | |||
... | ... | function rg_log($str) | |
22 | 22 | $rg_log_fd = @fopen($rg_log_file, "a+"); | $rg_log_fd = @fopen($rg_log_file, "a+"); |
23 | 23 | if ($rg_log_fd === FALSE) | if ($rg_log_fd === FALSE) |
24 | 24 | return; | return; |
25 | @chmod($rg_log_file, 0600); | ||
25 | 26 | // write an empty line | // write an empty line |
26 | 27 | fwrite($rg_log_fd, "\n"); | fwrite($rg_log_fd, "\n"); |
27 | 28 | } | } |
28 | 29 | ||
29 | 30 | $t = gettimeofday(); | $t = gettimeofday(); |
30 | $buf = gmdate("Y-m-d H:i:s", $t['sec']) . "." . sprintf("%06d", $t['usec']); | ||
31 | $buf = gmdate("Y-m-d H:i:s", $t['sec']) . "." . sprintf("%03u", $t['usec'] / 1000); | ||
31 | 32 | $buf .= " " . $rg_log_sid . " " . $str . "\n"; | $buf .= " " . $rg_log_sid . " " . $str . "\n"; |
32 | 33 | ||
33 | 34 | fwrite($rg_log_fd, $buf); | fwrite($rg_log_fd, $buf); |
File inc/login/login.form.php changed (mode: 100644) (index fb7b17c..7723ef5) | |||
... | ... | if (count($errmsg) > 0) | |
7 | 7 | $_form .= ' | $_form .= ' |
8 | 8 | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> |
9 | 9 | <input type="hidden" name="op" value="' . $op . '"> | <input type="hidden" name="op" value="' . $op . '"> |
10 | <input type="hidden" name="subop" value="1"> | ||
10 | 11 | <input type="hidden" name="doit" value="1"> | <input type="hidden" name="doit" value="1"> |
11 | 12 | <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '"> | <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '"> |
12 | 13 | ||
... | ... | Password: <input type="password" name="pass" value="' . $pass . '"><br /> | |
15 | 16 | <input type="submit" value="Login"> | <input type="submit" value="Login"> |
16 | 17 | </form> | </form> |
17 | 18 | <br /> | <br /> |
18 | |||
19 | Forgot your password?<br /> | ||
20 | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> | ||
21 | <input type="hidden" name="op" value="forgotmail"> | ||
22 | <input type="hidden" name="doit" value="1"> | ||
23 | <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '"> | ||
24 | |||
25 | E-mail: <input type="text" name="email" value=""><br /> | ||
26 | <input type="submit" value="Recover password"> | ||
27 | </form> | ||
19 | <a href="' . rg_re_url("forgot_send") . '">Forgot your password?</a> | ||
28 | 20 | '; | '; |
29 | 21 | ||
30 | |||
31 | 22 | ?> | ?> |
File inc/personal/personal.php changed (mode: 100644) (index 3bb262f..cd6b44c) | |||
... | ... | case 1: // edit info | |
31 | 31 | ||
32 | 32 | $xuser = rg_var_str("xuser"); | $xuser = rg_var_str("xuser"); |
33 | 33 | $email = rg_var_str("email"); | $email = rg_var_str("email"); |
34 | $xpass = rg_var_str("xpass"); | ||
35 | 34 | $is_admin = $rg_ui['is_admin']; // TODO: doesn't seems too elegant | $is_admin = $rg_ui['is_admin']; // TODO: doesn't seems too elegant |
36 | 35 | $disk_quota_mb = $rg_ui['disk_quota_mb']; | $disk_quota_mb = $rg_ui['disk_quota_mb']; |
37 | 36 | $rights = $rg_ui['rights']; | $rights = $rg_ui['rights']; |
37 | $session_time = rg_var_uint("session_time"); | ||
38 | 38 | ||
39 | $xpass = ""; | ||
39 | 40 | if (rg_user_edit($db, $rg_ui['uid'], $xuser, $email, $xpass, | if (rg_user_edit($db, $rg_ui['uid'], $xuser, $email, $xpass, |
40 | $is_admin, $disk_quota_mb, $rights)) { | ||
41 | $is_admin, $disk_quota_mb, $rights, $session_time)) { | ||
41 | 42 | $_body .= "OK!<br />"; | $_body .= "OK!<br />"; |
42 | 43 | } | } |
43 | 44 | } else { | } else { |
44 | // TODO: Check if user has the right to edit this info! | ||
45 | |||
46 | 45 | $xuser = $rg_ui['username']; | $xuser = $rg_ui['username']; |
47 | 46 | $email = $rg_ui['email']; | $email = $rg_ui['email']; |
48 | $xpass = ""; | ||
47 | $is_admin = $rg_ui['is_admin']; | ||
48 | $disk_quota_mb = $rg_ui['disk_quota_mb']; | ||
49 | $rights = $rg_ui['rights']; | ||
49 | 50 | $session_time = $rg_ui['session_time']; | $session_time = $rg_ui['session_time']; |
50 | 51 | } | } |
51 | 52 | ||
53 | $user_form_add = 0; | ||
52 | 54 | include($INC . "/admin/users/user.form.php"); | include($INC . "/admin/users/user.form.php"); |
53 | 55 | $_body .= $_form; | $_body .= $_form; |
54 | 56 | break; | break; |
55 | 57 | ||
56 | 58 | case 2: // change password | case 2: // change password |
59 | $show_form = 1; | ||
57 | 60 | $error = array(); | $error = array(); |
58 | 61 | if ($doit == 1) { | if ($doit == 1) { |
59 | 62 | $old_pass = rg_var_str("old_pass"); | $old_pass = rg_var_str("old_pass"); |
... | ... | case 2: // change password | |
66 | 69 | break; | break; |
67 | 70 | } | } |
68 | 71 | ||
69 | if (!rg_user_pass_valid($db, $rg_ui['uid'], $old_pass)) { | ||
70 | $error[] = "Old password is invalid!"; | ||
72 | if (strcmp($pass1, $pass2) != 0) { | ||
73 | $error[] = "Passwords does not match!"; | ||
71 | 74 | break; | break; |
72 | 75 | } | } |
73 | 76 | ||
74 | if (strcmp($pass1, $pass2) != 0) { | ||
75 | $error[] = "Passwords does not match!"; | ||
77 | if (!rg_user_pass_valid($db, $rg_ui['uid'], $old_pass)) { | ||
78 | $error[] = "Old password is invalid!"; | ||
76 | 79 | break; | break; |
77 | 80 | } | } |
78 | 81 | ||
... | ... | case 2: // change password | |
80 | 83 | $error[] = rg_user_error(); | $error[] = rg_user_error(); |
81 | 84 | break; | break; |
82 | 85 | } | } |
86 | |||
87 | $_body .= "OK!<br />"; | ||
88 | $show_form = 0; | ||
89 | break; | ||
83 | 90 | } | } |
84 | 91 | } | } |
85 | 92 | ||
86 | include($INC . "/personal/pass.form.php"); | ||
87 | $_body .= $_chpass_form; | ||
93 | if ($show_form == 1) { | ||
94 | include($INC . "/personal/pass.form.php"); | ||
95 | $_body .= $_chpass_form; | ||
96 | } | ||
97 | |||
88 | 98 | break; | break; |
89 | 99 | } | } |
90 | 100 |
File inc/repo.inc.php changed (mode: 100644) (index 6af30b2..20d39e9) | |||
... | ... | function rg_repo_allow($db, $ri, $rg_ui, $needed_rights) | |
175 | 175 | * @master - makes sense only for clones - who is the master. | * @master - makes sense only for clones - who is the master. |
176 | 176 | * TODO: put all fields into an array! | * TODO: put all fields into an array! |
177 | 177 | */ | */ |
178 | function rg_repo_create($db, $master, $rg_ui, $name, $max_commit_size, $desc, | ||
179 | $rights, $max_users) | ||
178 | function rg_repo_create($db, $master, $rg_ui, $name, $max_commit_size, | ||
179 | $description, $rights, $max_users) | ||
180 | 180 | { | { |
181 | 181 | // TODO: reorder parameters - are not logical | // TODO: reorder parameters - are not logical |
182 | 182 | rg_log("repo_create: rg_uid=" . $rg_ui['uid'] | rg_log("repo_create: rg_uid=" . $rg_ui['uid'] |
183 | 183 | . ", name=[$name], master=$master" | . ", name=[$name], master=$master" |
184 | . ", max_commit_size=$max_commit_size, desc=[$desc]" | ||
184 | . ", max_commit_size=$max_commit_size" | ||
185 | . ", description=[$description]" | ||
185 | 186 | . ", rights=$rights, max_users=$max_users..."); | . ", rights=$rights, max_users=$max_users..."); |
186 | 187 | ||
187 | 188 | // TODO: test if user is allowed to add a repository | // TODO: test if user is allowed to add a repository |
... | ... | function rg_repo_create($db, $master, $rg_ui, $name, $max_commit_size, $desc, | |
199 | 200 | } | } |
200 | 201 | ||
201 | 202 | $e_name = rg_sql_escape($db, $name); | $e_name = rg_sql_escape($db, $name); |
202 | $e_desc = rg_sql_escape($db, $desc); | ||
203 | $e_description = rg_sql_escape($db, $description); | ||
203 | 204 | ||
204 | 205 | $itime = time(); | $itime = time(); |
205 | 206 | ||
... | ... | function rg_repo_create($db, $master, $rg_ui, $name, $max_commit_size, $desc, | |
207 | 208 | . ", max_commit_size, description, git_dir_done, default_rights" | . ", max_commit_size, description, git_dir_done, default_rights" |
208 | 209 | . ", max_users)" | . ", max_users)" |
209 | 210 | . " VALUES (" . $rg_ui['uid'] . ", $master, '$e_name', $itime" | . " VALUES (" . $rg_ui['uid'] . ", $master, '$e_name', $itime" |
210 | . ", $max_commit_size, '$e_desc', 0, '$rights', $max_users)"; | ||
211 | . ", $max_commit_size, '$e_description', 0, '$rights', $max_users)"; | ||
211 | 212 | $res = rg_sql_query($db, $sql); | $res = rg_sql_query($db, $sql); |
212 | 213 | if ($res === FALSE) { | if ($res === FALSE) { |
213 | 214 | rg_repo_set_error("Cannot insert (" . rg_sql_error() . ")"); | rg_repo_set_error("Cannot insert (" . rg_sql_error() . ")"); |
... | ... | function rg_repo_update($db, &$new) | |
251 | 252 | rg_log("repo_update: repo_id=" . $new['repo_id'] | rg_log("repo_update: repo_id=" . $new['repo_id'] |
252 | 253 | . ", name=[" . $new['name'] . "]" | . ", name=[" . $new['name'] . "]" |
253 | 254 | . ", max_commit_size=" . $new['max_commit_size'] | . ", max_commit_size=" . $new['max_commit_size'] |
254 | . ", desc=[" . $new['desc'] . "]" | ||
255 | . ", description=[" . $new['description'] . "]" | ||
255 | 256 | . ", default_rights=" . $new['default_rights'] | . ", default_rights=" . $new['default_rights'] |
256 | 257 | . ", max_users=" . $new['max_users']); | . ", max_users=" . $new['max_users']); |
257 | 258 | ||
... | ... | function rg_repo_update($db, &$new) | |
277 | 278 | } | } |
278 | 279 | ||
279 | 280 | $e_name = rg_sql_escape($db, $new['name']); | $e_name = rg_sql_escape($db, $new['name']); |
280 | $e_desc = rg_sql_escape($db, $new['desc']); | ||
281 | $e_description = rg_sql_escape($db, $new['description']); | ||
281 | 282 | ||
282 | 283 | $sql = "UPDATE repos SET name = '$e_name'" | $sql = "UPDATE repos SET name = '$e_name'" |
283 | 284 | . ", max_commit_size = " . $new['max_commit_size'] | . ", max_commit_size = " . $new['max_commit_size'] |
284 | . ", description = '$e_desc'" | ||
285 | . ", description = '$e_description'" | ||
285 | 286 | . ", default_rights = '" . $new['default_rights'] . "'" | . ", default_rights = '" . $new['default_rights'] . "'" |
286 | 287 | . ", max_users = " . $new['max_users'] | . ", max_users = " . $new['max_users'] |
287 | 288 | . " WHERE repo_id = " . $new['repo_id']; | . " WHERE repo_id = " . $new['repo_id']; |
... | ... | function rg_repo_list_query($db, $url, $sql) | |
321 | 322 | $ret .= " <th>Clone of</th>\n"; | $ret .= " <th>Clone of</th>\n"; |
322 | 323 | $ret .= " <th>Creation date (UTC)</th>\n"; | $ret .= " <th>Creation date (UTC)</th>\n"; |
323 | 324 | $ret .= " <th>Default rights</th>\n"; | $ret .= " <th>Default rights</th>\n"; |
324 | $ret .= " <th>Disk current/max</th>\n"; | ||
325 | $ret .= " <th>Disk used/max</th>\n"; | ||
325 | 326 | $ret .= " <th>Max commit size</th>\n"; | $ret .= " <th>Max commit size</th>\n"; |
326 | 327 | $ret .= " <th>Max users</th>\n"; | $ret .= " <th>Max users</th>\n"; |
327 | 328 | $ret .= "</tr>\n"; | $ret .= "</tr>\n"; |
... | ... | function rg_repo_list_query($db, $url, $sql) | |
354 | 355 | ||
355 | 356 | $_max = "ulimited"; | $_max = "ulimited"; |
356 | 357 | if ($row['disk_quota_mb'] > 0) | if ($row['disk_quota_mb'] > 0) |
357 | $_max = rg_1024($row['disk_quota_mb']); | ||
358 | $ret .= " <td>" . $row['disk_mb'] . "/" . $_max . "</td>\n"; | ||
358 | $_max = rg_1024($row['disk_quota_mb'] * 1024 * 1024); | ||
359 | $ret .= " <td>" . $row['disk_used_mb'] . "/" . $_max . "</td>\n"; | ||
359 | 360 | ||
360 | 361 | $_v = "ulimited"; | $_v = "ulimited"; |
361 | 362 | if ($row['max_commit_size'] > 0) | if ($row['max_commit_size'] > 0) |
File inc/repo/repo.form.php changed (mode: 100644) (index a6d7aa0..666c841) | |||
... | ... | $_form .= ' | |
45 | 45 | <tr> | <tr> |
46 | 46 | <td>Description:</td> | <td>Description:</td> |
47 | 47 | <td> | <td> |
48 | <textarea name="desc" value="' . $desc . '" rows="4" cols="30">' . $desc . '</textarea><br /> | ||
48 | <textarea name="description" value="' . $description . '" rows="4" cols="30">' . $description . '</textarea><br /> | ||
49 | 49 | </td> | </td> |
50 | 50 | </tr> | </tr> |
51 | 51 |
File inc/repo/repo.php changed (mode: 100644) (index 3d05e09..473a0c3) | |||
... | ... | if ($rg_ui['uid'] == 0) { | |
11 | 11 | $name = rg_var_str("name"); | $name = rg_var_str("name"); |
12 | 12 | $max_commit_size = rg_var_uint("max_commit_size"); | $max_commit_size = rg_var_uint("max_commit_size"); |
13 | 13 | $max_users = rg_var_uint("max_users"); | $max_users = rg_var_uint("max_users"); |
14 | $desc = rg_var_str("desc"); | ||
14 | $description = rg_var_str("description"); | ||
15 | 15 | $master_repo_id = rg_var_uint("master_repo_id"); | $master_repo_id = rg_var_uint("master_repo_id"); |
16 | $rights = rg_var_str("rights"); | ||
17 | $rights = rg_rights_a2s($rights); | ||
16 | $rights = @rg_rights_a2s($_REQUEST['rights']); | ||
18 | 17 | $repo_id = rg_var_uint("repo_id"); | $repo_id = rg_var_uint("repo_id"); |
19 | 18 | $q = rg_var_str("q"); | $q = rg_var_str("q"); |
20 | 19 | $masters = rg_var_uint("masters"); | $masters = rg_var_uint("masters"); |
... | ... | switch ($subop) { | |
35 | 34 | case 1: // create | case 1: // create |
36 | 35 | if ($doit == 1) { | if ($doit == 1) { |
37 | 36 | $_r = rg_repo_create($db, $master_repo_id, $rg_ui, $name, | $_r = rg_repo_create($db, $master_repo_id, $rg_ui, $name, |
38 | $max_commit_size, $desc, $rights, $max_users); | ||
37 | $max_commit_size, $description, $rights, $max_users); | ||
39 | 38 | if ($_r === FALSE) | if ($_r === FALSE) |
40 | 39 | $_body .= rg_repo_error(); | $_body .= rg_repo_error(); |
41 | 40 | else | else |
File inc/repo/repo_page.php changed (mode: 100644) (index 7ddfab8..910d698) | |||
... | ... | $repo = rg_var_str("repo"); | |
5 | 5 | $repo_id = rg_var_uint("repo_id"); | $repo_id = rg_var_uint("repo_id"); |
6 | 6 | $name = rg_var_str("name"); | $name = rg_var_str("name"); |
7 | 7 | $max_commit_size = rg_var_uint("max_commit_size"); | $max_commit_size = rg_var_uint("max_commit_size"); |
8 | $desc = rg_var_str("desc"); | ||
8 | $description = rg_var_str("description"); | ||
9 | 9 | $rights = @rg_rights_a2s($_REQUEST['rights']); | $rights = @rg_rights_a2s($_REQUEST['rights']); |
10 | 10 | $max_users = rg_var_uint("max_users"); | $max_users = rg_var_uint("max_users"); |
11 | 11 | $user = rg_var_str("user"); | $user = rg_var_str("user"); |
... | ... | case 1: // edit | |
43 | 43 | ||
44 | 44 | $ri['name'] = $name; // TODO: filter name! | $ri['name'] = $name; // TODO: filter name! |
45 | 45 | $ri['max_commit_size'] = $max_commit_size; | $ri['max_commit_size'] = $max_commit_size; |
46 | $ri['desc'] = $desc; // TODO: filter | ||
46 | $ri['description'] = $description; // TODO: filter | ||
47 | 47 | $ri['default_rights'] = $rights; // TODO: filter | $ri['default_rights'] = $rights; // TODO: filter |
48 | 48 | $ri['max_users'] = $max_users; | $ri['max_users'] = $max_users; |
49 | 49 | $_r = rg_repo_update($db, $ri); | $_r = rg_repo_update($db, $ri); |
... | ... | case 1: // edit | |
61 | 61 | $rights = $ri['default_rights']; | $rights = $ri['default_rights']; |
62 | 62 | $max_commit_size = $ri['max_commit_size']; | $max_commit_size = $ri['max_commit_size']; |
63 | 63 | $max_users = $ri['max_users']; | $max_users = $ri['max_users']; |
64 | $desc = $ri['desc']; | ||
64 | $description = $ri['description']; | ||
65 | 65 | ||
66 | 66 | $_action = "Update"; | $_action = "Update"; |
67 | 67 | include($INC . "/repo/repo.form.php"); | include($INC . "/repo/repo.form.php"); |
File inc/rights.inc.php changed (mode: 100644) (index 3d8c054..9d20553) | |||
... | ... | function rg_rights_checkboxes($type, $passed_rights) | |
91 | 91 | foreach ($rg_rights[$type] as $right => $info) { | foreach ($rg_rights[$type] as $right => $info) { |
92 | 92 | $add = ""; | $add = ""; |
93 | 93 | if (strstr($passed_rights, $right)) | if (strstr($passed_rights, $right)) |
94 | $add = " checked"; | ||
94 | $add = " checked=\"checked\""; | ||
95 | 95 | $ret .= "<input type=\"checkbox\" name=\"rights[$right]\"" | $ret .= "<input type=\"checkbox\" name=\"rights[$right]\"" |
96 | 96 | . $add . " />$info<br />\n"; | . $add . " />$info<br />\n"; |
97 | 97 | } | } |
... | ... | function rg_rights_a2s($a) | |
129 | 129 | { | { |
130 | 130 | $rights = ""; | $rights = ""; |
131 | 131 | ||
132 | // TODO - log backtrace instead being silent | ||
132 | 133 | if (is_array($a)) | if (is_array($a)) |
133 | 134 | foreach ($a as $right => $junk) | foreach ($a as $right => $junk) |
134 | 135 | $rights .= $right; | $rights .= $right; |
... | ... | function rg_rights_list($db, $type, $obj_id, $url) | |
271 | 272 | return $ret; | return $ret; |
272 | 273 | } | } |
273 | 274 | ||
275 | /* | ||
276 | * Filters var using mask | ||
277 | * Example ("ABCDE", "AEZ") => "AE" | ||
278 | */ | ||
279 | function rg_rights_mask($val, $mask) | ||
280 | { | ||
281 | $ret = ""; | ||
282 | $len = strlen($val); | ||
283 | for ($i = 0; $i < $len; $i++) | ||
284 | if (strstr($mask, $val[$i])) | ||
285 | $ret .= $val[$i]; | ||
286 | |||
287 | return $ret; | ||
288 | } | ||
289 | |||
274 | 290 | ?> | ?> |
File inc/token.inc.php changed (mode: 100644) (index 2f2e042..6e7c67b) | |||
... | ... | function rg_token_delete($db, $sid, $token) | |
38 | 38 | . $add_token; | . $add_token; |
39 | 39 | $res = rg_sql_query($db, $sql); | $res = rg_sql_query($db, $sql); |
40 | 40 | if ($res === FALSE) { | if ($res === FALSE) { |
41 | rg_token_set_error("Cannot delete token (" . rg_sql_error() . ")!"); | ||
41 | rg_token_set_error("cannot delete token (" . rg_sql_error() . ")"); | ||
42 | 42 | return $ret; | return $ret; |
43 | 43 | } | } |
44 | 44 | rg_sql_free_result($res); | rg_sql_free_result($res); |
... | ... | function rg_token_delete($db, $sid, $token) | |
49 | 49 | } | } |
50 | 50 | ||
51 | 51 | /* | /* |
52 | * Returns if the token is valid | ||
52 | * Returns TRUE if the token is valid | ||
53 | 53 | */ | */ |
54 | 54 | function rg_token_valid($db, $sid, $token) | function rg_token_valid($db, $sid, $token) |
55 | 55 | { | { |
... | ... | function rg_token_valid($db, $sid, $token) | |
60 | 60 | . " AND sid = '$sid'"; | . " AND sid = '$sid'"; |
61 | 61 | $res = rg_sql_query($db, $sql); | $res = rg_sql_query($db, $sql); |
62 | 62 | if ($res === FALSE) { | if ($res === FALSE) { |
63 | rg_token_set_error("Cannot get token (" . rg_sql_error() . ")!"); | ||
63 | rg_token_set_error("cannot get token (" . rg_sql_error() . ")"); | ||
64 | 64 | return FALSE; | return FALSE; |
65 | 65 | } | } |
66 | 66 | ||
67 | 67 | $ret['ok'] = 1; | $ret['ok'] = 1; |
68 | 68 | $ret['exists'] = 0; | $ret['exists'] = 0; |
69 | $row = rg_sql_fetch_array($res); | ||
69 | $rows = rg_sql_num_rows($res); | ||
70 | 70 | rg_sql_free_result($res); | rg_sql_free_result($res); |
71 | if (!isset($row['junk'])) { | ||
72 | rg_token_set_error("Token not found!"); | ||
73 | return TRUE; | ||
74 | } | ||
71 | if ($rows == 0) | ||
72 | return FALSE; | ||
75 | 73 | ||
76 | 74 | return TRUE; | return TRUE; |
77 | 75 | } | } |
File inc/user.inc.php changed (mode: 100644) (index 63568c8..cf88590) | |||
... | ... | function rg_user_ok($user) | |
81 | 81 | * If uid > 0 - edit, else, add | * If uid > 0 - edit, else, add |
82 | 82 | */ | */ |
83 | 83 | function rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, | function rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, |
84 | $disk_quota_mb, $rights) | ||
84 | $disk_quota_mb, $rights, $session_time) | ||
85 | 85 | { | { |
86 | global $rg_session_time; | ||
87 | |||
88 | 86 | rg_log("user_edit: uid=$uid, user=$user email=$email" | rg_log("user_edit: uid=$uid, user=$user email=$email" |
89 | 87 | . " pass=$pass is_admin=$is_admin" | . " pass=$pass is_admin=$is_admin" |
90 | . " disk_quota_mb=$disk_quota_mb rights=$rights..."); | ||
88 | . " disk_quota_mb=$disk_quota_mb rights=$rights" | ||
89 | . " session_time=$session_time..."); | ||
91 | 90 | ||
92 | 91 | if (rg_user_ok($user) !== TRUE) | if (rg_user_ok($user) !== TRUE) |
93 | 92 | return FALSE; | return FALSE; |
... | ... | function rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, | |
97 | 96 | $e_pass = rg_user_pass($e_salt, $pass); | $e_pass = rg_user_pass($e_salt, $pass); |
98 | 97 | $e_email = rg_sql_escape($db, $email); | $e_email = rg_sql_escape($db, $email); |
99 | 98 | $e_rights = rg_sql_escape($db, $rights); | $e_rights = rg_sql_escape($db, $rights); |
100 | $e_session_time = $rg_session_time; | ||
101 | 99 | ||
102 | 100 | if ($uid == 0) { // add | if ($uid == 0) { // add |
103 | 101 | if (rg_user_pass_ok($pass) !== TRUE) | if (rg_user_pass_ok($pass) !== TRUE) |
... | ... | function rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, | |
108 | 106 | . ", is_admin, disk_quota_mb, rights, session_time)" | . ", is_admin, disk_quota_mb, rights, session_time)" |
109 | 107 | . " VALUES ('$e_user', '$e_salt', '$e_pass'" | . " VALUES ('$e_user', '$e_salt', '$e_pass'" |
110 | 108 | . ", '$e_email', $now, $is_admin, $disk_quota_mb" | . ", '$e_email', $now, $is_admin, $disk_quota_mb" |
111 | . ", '$e_rights', $e_session_time)"; | ||
109 | . ", '$e_rights', $session_time)"; | ||
112 | 110 | } else { // edit | } else { // edit |
113 | 111 | $salt_pass_add = ""; | $salt_pass_add = ""; |
114 | 112 | if (!empty($pass)) | if (!empty($pass)) |
... | ... | function rg_user_edit($db, $uid, $user, $email, $pass, $is_admin, | |
120 | 118 | . ", is_admin = $is_admin" | . ", is_admin = $is_admin" |
121 | 119 | . ", disk_quota_mb = $disk_quota_mb" | . ", disk_quota_mb = $disk_quota_mb" |
122 | 120 | . ", rights = '$e_rights'" | . ", rights = '$e_rights'" |
123 | . ", session_time = $e_session_time" | ||
121 | . ", session_time = $session_time" | ||
124 | 122 | . " WHERE uid = $uid"; | . " WHERE uid = $uid"; |
125 | 123 | } | } |
126 | 124 | ||
... | ... | function rg_user_pass_valid($db, $uid, $pass) | |
240 | 238 | { | { |
241 | 239 | rg_log("user_pass_valid: uid=$uid, pass=$pass..."); | rg_log("user_pass_valid: uid=$uid, pass=$pass..."); |
242 | 240 | ||
243 | if (empty($pass)) | ||
241 | if (empty($pass)) { | ||
242 | rg_log("\tPassword is empty."); | ||
244 | 243 | return FALSE; | return FALSE; |
244 | } | ||
245 | 245 | ||
246 | 246 | $ui = rg_user_info($db, $uid, "", ""); | $ui = rg_user_info($db, $uid, "", ""); |
247 | if ($ui['exists'] != 1) | ||
247 | if ($ui['exists'] != 1) { | ||
248 | rg_log("\tUser does not exists."); | ||
248 | 249 | return FALSE; | return FALSE; |
250 | } | ||
249 | 251 | ||
250 | 252 | $sha1pass = rg_user_pass($ui['salt'], $pass); | $sha1pass = rg_user_pass($ui['salt'], $pass); |
251 | if (strcmp($sha1pass, $ui['pass']) != 0) | ||
253 | if (strcmp($sha1pass, $ui['pass']) != 0) { | ||
254 | rg_log("\tPassword is not ok [$sha1pass] != [" . $ui['pass'] . "]."); | ||
252 | 255 | return FALSE; | return FALSE; |
256 | } | ||
253 | 257 | ||
258 | rg_log("\tPass is valid."); | ||
254 | 259 | return TRUE; | return TRUE; |
255 | 260 | } | } |
256 | 261 | ||
... | ... | function rg_user_login_by_user_pass($db, $user, $pass, &$rg_ui) | |
291 | 296 | $sid = rg_id(40); | $sid = rg_id(40); |
292 | 297 | rg_sess_add($db, $rg_ui['uid'], $sid, $rg_ui['session_time']); | rg_sess_add($db, $rg_ui['uid'], $sid, $rg_ui['session_time']); |
293 | 298 | setcookie("sid", $sid, 0, "/", $_SERVER['HTTP_HOST'], | setcookie("sid", $sid, 0, "/", $_SERVER['HTTP_HOST'], |
294 | strcmp($_SERVER['HTTPS'], "on") == 0 /* secure */, | ||
299 | @strcmp($_SERVER['HTTPS'], "on") == 0 /* secure */, | ||
295 | 300 | TRUE /* httponly */); | TRUE /* httponly */); |
296 | 301 | ||
297 | 302 | rg_user_set_last_seen($db, $rg_ui['uid']); | rg_user_set_last_seen($db, $rg_ui['uid']); |
... | ... | function rg_user_list($db, $url) | |
426 | 431 | $ret .= " <td>" . ($row['is_admin'] == 1 ? "Yes" : "No") . "</td>\n"; | $ret .= " <td>" . ($row['is_admin'] == 1 ? "Yes" : "No") . "</td>\n"; |
427 | 432 | $ret .= " <td>" . gmdate("Y-m-d H:i:s", $row['itime']) . "</td>\n"; | $ret .= " <td>" . gmdate("Y-m-d H:i:s", $row['itime']) . "</td>\n"; |
428 | 433 | if ($row['disk_quota_mb'] > 0) | if ($row['disk_quota_mb'] > 0) |
429 | $_v = rg_1024($row['disk_quota_mb']); | ||
434 | $_v = rg_1024($row['disk_quota_mb'] * 1024 * 1024); | ||
430 | 435 | else | else |
431 | 436 | $_v = "unlimited"; | $_v = "unlimited"; |
432 | 437 | $ret .= " <td>" . $_v . "</td>\n"; | $ret .= " <td>" . $_v . "</td>\n"; |
... | ... | function rg_user_forgot_pass_mail_prepare($db, $email) | |
543 | 548 | */ | */ |
544 | 549 | function rg_user_forgot_pass_mail($db, $email) | function rg_user_forgot_pass_mail($db, $email) |
545 | 550 | { | { |
551 | global $rg_admin_name, $rg_admin_email; | ||
552 | |||
546 | 553 | rg_log("user_forgot_pass_mail: email=$email"); | rg_log("user_forgot_pass_mail: email=$email"); |
547 | 554 | ||
548 | $token = rg_user_forgot_pass_mail_prepare($db, $email); | ||
549 | if ($token === FALSE) | ||
555 | $forgot_token = rg_user_forgot_pass_mail_prepare($db, $email); | ||
556 | if ($forgot_token === FALSE) | ||
550 | 557 | return FALSE; | return FALSE; |
551 | 558 | ||
552 | if (!mail($email, "Forgot password", | ||
553 | "Hello!\nIf you want to reset the password, follow:\n" | ||
559 | $headers = "From: $rg_admin_name <$rg_admin_email>"; | ||
560 | |||
561 | if (!mail($email, | ||
562 | "Forgot password", | ||
563 | "Hello!\n" | ||
564 | . "If you want to reset the password, follow:\n" | ||
554 | 565 | . "http://" . @$_SERVER['SERVER_NAME'] | . "http://" . @$_SERVER['SERVER_NAME'] |
555 | . "/" . @$_SERVER['PHP_SELF'] | ||
556 | . "?op=6&token=$token")) { | ||
557 | rg_user_set_error("Cannot send mail!"); | ||
566 | . rg_re_url("forgot_link") . "&forgot_token=$forgot_token", | ||
567 | $headers, | ||
568 | "-f $rg_admin_email")) { | ||
569 | rg_user_set_error("Cannot send mail ($php_errormsg)!"); | ||
558 | 570 | return FALSE; | return FALSE; |
559 | 571 | } | } |
560 | 572 | ||
... | ... | function rg_user_forgot_pass_mail($db, $email) | |
566 | 578 | */ | */ |
567 | 579 | function rg_user_forgot_pass_destroy($db, $uid) | function rg_user_forgot_pass_destroy($db, $uid) |
568 | 580 | { | { |
569 | rg_log("user_forgot_pass_destroy: token=$token"); | ||
581 | rg_log("user_forgot_pass_destroy: uid=$uid"); | ||
570 | 582 | ||
571 | 583 | $sql = "DELETE FROM forgot_pass WHERE uid = $uid"; | $sql = "DELETE FROM forgot_pass WHERE uid = $uid"; |
572 | 584 | $res = rg_sql_query($db, $sql); | $res = rg_sql_query($db, $sql); |
... | ... | function rg_user_set_pass($db, $uid, $pass) | |
591 | 603 | . ", pass = '$e_sha1pass'" | . ", pass = '$e_sha1pass'" |
592 | 604 | . " WHERE uid = " . $uid; | . " WHERE uid = " . $uid; |
593 | 605 | $res = rg_sql_query($db, $sql); | $res = rg_sql_query($db, $sql); |
594 | if ($res === FALSE) | ||
606 | if ($res === FALSE) { | ||
607 | rg_user_set_error("cannot update pass (" . rg_sql_error() . ")"); | ||
595 | 608 | return FALSE; | return FALSE; |
609 | } | ||
596 | 610 | rg_sql_free_result($res); | rg_sql_free_result($res); |
597 | 611 | ||
598 | 612 | return TRUE; | return TRUE; |
File inc/user/forgot.form.php changed (mode: 100644) (index 6285035..5baca36) | |||
2 | 2 | ||
3 | 3 | $_forgot_form = ""; | $_forgot_form = ""; |
4 | 4 | ||
5 | if (!empty($error)) | ||
6 | $_forgot_form .= "<font color=red>$error</font><br />\n"; | ||
5 | if (count($errmsg) > 0) | ||
6 | $_forgot_form .= "<font color=red>" . implode("<br />\n", $errmsg) . "</font><br />\n"; | ||
7 | 7 | ||
8 | 8 | $_forgot_form .= ' | $_forgot_form .= ' |
9 | 9 | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> |
10 | 10 | <input type="hidden" name="op" value="' . $op . '"> | <input type="hidden" name="op" value="' . $op . '"> |
11 | <input type="hidden" name="ftoken" value="' . $ftoken . '"> | ||
11 | <input type="hidden" name="forgot_token" value="' . $forgot_token . '"> | ||
12 | 12 | <input type="hidden" name="doit" value="1"> | <input type="hidden" name="doit" value="1"> |
13 | 13 | <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '"> | <input type="hidden" name="token" value="' . rg_token_get($db, $sid) . '"> |
14 | 14 |
File inc/user/forgot.php changed (mode: 100644) (index 9b7d719..f2a2a65) | |||
1 | 1 | <?php | <?php |
2 | 2 | rg_log("/inc/user/forgot.php"); | rg_log("/inc/user/forgot.php"); |
3 | 3 | ||
4 | $ftoken = rg_var_str("ftoken"); | ||
4 | $forgot_token = rg_var_str("forgot_token"); | ||
5 | 5 | $pass1 = rg_var_str("pass1"); | $pass1 = rg_var_str("pass1"); |
6 | 6 | $pass2 = rg_var_str("pass2"); | $pass2 = rg_var_str("pass2"); |
7 | 7 | ||
8 | 8 | $_forgot = "<br />\n"; | $_forgot = "<br />\n"; |
9 | 9 | ||
10 | 10 | $_hide_form = 0; | $_hide_form = 0; |
11 | $errmsg = array(); | ||
11 | 12 | ||
12 | 13 | if ($doit == 1) { | if ($doit == 1) { |
13 | $error = ""; | ||
14 | 14 | if (strcmp($pass1, $pass2) != 0) { | if (strcmp($pass1, $pass2) != 0) { |
15 | $error .= "Passwords mismatch."; | ||
15 | $errmsg[] = "Passwords mismatch."; | ||
16 | 16 | } else { | } else { |
17 | $r = user_forgot_pass_uid($db, $ftoken); | ||
17 | $r = rg_user_forgot_pass_uid($db, $forgot_token); | ||
18 | 18 | if ($r['ok'] != 1) { | if ($r['ok'] != 1) { |
19 | $error .= "Internal error, try again later."; | ||
19 | $errmsg[] = "Internal error, try again later."; | ||
20 | 20 | } else if ($r['uid'] == 0) { | } else if ($r['uid'] == 0) { |
21 | $error .= "Invalid (or expired) reset pass URL!"; | ||
21 | $errmsg[] = "Invalid (or expired) reset pass URL!"; | ||
22 | 22 | } else { | } else { |
23 | if (user_set_pass($db, $r['uid'], $pass1)) { | ||
24 | user_forgot_pass_destroy($db, $r['uid']); | ||
23 | if (rg_user_set_pass($db, $r['uid'], $pass1)) { | ||
24 | rg_user_forgot_pass_destroy($db, $r['uid']); | ||
25 | 25 | // auto-login | // auto-login |
26 | $rg_ui = user_info($db, $r['uid'], "", ""); | ||
26 | $rg_ui = rg_user_info($db, $r['uid'], "", ""); | ||
27 | 27 | $_forgot .= "OK!"; | $_forgot .= "OK!"; |
28 | 28 | $_hide_form = 1; | $_hide_form = 1; |
29 | 29 | } else { | } else { |
30 | $error .= "Internal error - try later!"; | ||
30 | $errmsg[] = "Internal error - try later!"; | ||
31 | 31 | } | } |
32 | 32 | } | } |
33 | 33 | } | } |
File inc/user/forgot_mail.php deleted (index ca8df55..0000000) | |||
1 | <?php | ||
2 | rg_log("/inc/user/forgot_mail.php"); | ||
3 | |||
4 | $email = rg_var_str("email"); | ||
5 | |||
6 | $_forgot = "<br />\n"; | ||
7 | |||
8 | if ($doit == 1) { | ||
9 | $r = user_forgot_pass_mail($db, $email); | ||
10 | if ($r === FALSE) | ||
11 | $_forgot .= "Cannot send mail!"; | ||
12 | else | ||
13 | $_forgot .= "E-mail was sent!"; | ||
14 | } | ||
15 | |||
16 | ?> |
File inc/user/forgot_send.form.php added (mode: 100644) (index 0000000..ff806d6) | |||
1 | <?php | ||
2 | $_form = ''; | ||
3 | |||
4 | if (count($errmsg) > 0) | ||
5 | $_form .= "<font color=red>" . implode("<br />\n", $errmsg) . "</font>\n"; | ||
6 | |||
7 | $_form .= ' | ||
8 | <form method="post" action="' . $_SERVER['PHP_SELF'] . '"> | ||
9 | <input type="hidden" name="op" value="forgotsend"> | ||
10 | <input type="hidden" name="subop" value="2"> | ||
11 | <input type="hidden" name="doit" value="1"> | ||
12 | |||
13 | E-mail: <input type="text" name="email" value=""><br /> | ||
14 | <input type="submit" value="Recover password"> | ||
15 | </form> | ||
16 | '; | ||
17 | |||
18 | ?> |
File inc/user/forgot_send.php added (mode: 100644) (index 0000000..ad344f2) | |||
1 | <?php | ||
2 | rg_log("/inc/user/forgot_send.php"); | ||
3 | |||
4 | $email = rg_var_str("email"); | ||
5 | |||
6 | $_forgot = "<br />\n"; | ||
7 | |||
8 | $show_form = 1; | ||
9 | $errmsg = array(); | ||
10 | |||
11 | if ($doit == 1) { | ||
12 | $r = rg_user_forgot_pass_mail($db, $email); | ||
13 | if ($r === FALSE) { | ||
14 | $errmsg[] = "Cannot send mail!"; | ||
15 | } else { | ||
16 | $_forgot .= "E-mail was sent!"; | ||
17 | $show_form = 0; | ||
18 | } | ||
19 | } | ||
20 | |||
21 | if ($show_form == 1) { | ||
22 | include($INC ."/user/forgot_send.form.php"); | ||
23 | $_forgot .= $_form; | ||
24 | } | ||
25 | |||
26 | ?> |
File inc/util.inc.php changed (mode: 100644) (index 6b1a456..f47325c) | |||
... | ... | function rg_re_repopage($repo_id, $repo_name) | |
87 | 87 | if (isset($_REQUEST['rewrite_engine'])) | if (isset($_REQUEST['rewrite_engine'])) |
88 | 88 | return "/" . $repo_name; | return "/" . $repo_name; |
89 | 89 | ||
90 | return $_SERVER['PHP_SELF'] . "?op=repo&subop=2&repo_id=" . $repo_id; | ||
90 | return $_SERVER['PHP_SELF'] . "?op=repo&subop=2&repo_name=" . $repo_name; | ||
91 | 91 | } | } |
92 | 92 | ||
93 | 93 | function rg_var_str($name) | function rg_var_str($name) |
... | ... | function rg_chars_allow($name, $allowed_regexp) | |
138 | 138 | */ | */ |
139 | 139 | function rg_rmdir($dir) | function rg_rmdir($dir) |
140 | 140 | { | { |
141 | $scan = glob($dir); | ||
142 | foreach ($scan as $junk => $path) | ||
143 | @unlink($path); | ||
144 | @rmdir($dir); | ||
141 | $scan = glob($dir . "/*"); | ||
142 | if ($scan === FALSE) { | ||
143 | rg_log("\tInvalid pattern [$dir/*]!"); | ||
144 | return FALSE; | ||
145 | } | ||
146 | |||
147 | if (count($scan) > 0) { | ||
148 | foreach ($scan as $junk => $path) { | ||
149 | if (!@unlink($path)) { | ||
150 | rg_log("\tCannot remove [$path] ($php_errormsg)!"); | ||
151 | return FALSE; | ||
152 | } | ||
153 | } | ||
154 | } | ||
155 | |||
156 | if (!@rmdir($dir)) { | ||
157 | rg_log("\tCannot remove main dir ($php_errormsg)!"); | ||
158 | return FALSE; | ||
159 | } | ||
160 | |||
161 | return TRUE; | ||
145 | 162 | } | } |
146 | 163 | ||
147 | 164 | ?> | ?> |
File rocketgit.spec.in changed (mode: 100644) (index 63a2589..b679ef4) | |||
... | ... | Source: http://kernel.embedromix.ro/us/rocketgit/%{name}-%{version}.tar.gz | |
8 | 8 | URL: http://kernel.embedromix.ro/us/ | URL: http://kernel.embedromix.ro/us/ |
9 | 9 | BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot | BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot |
10 | 10 | BuildArch: noarch | BuildArch: noarch |
11 | Requires: httpd, php-process, php-cli, php-pgsql, xinetd, shadow-utils | ||
11 | Requires: httpd, php, php-process, php-cli, php-pgsql, xinetd, shadow-utils, git, postgresql-server | ||
12 | 12 | ||
13 | 13 | ||
14 | 14 | %description | %description |
... | ... | getent passwd rocketgit || useradd -r -g rocketgit -s /sbin/nologin -m -d /home/ | |
21 | 21 | %post | %post |
22 | 22 | if [ $1 -ne 0 ]; then | if [ $1 -ne 0 ]; then |
23 | 23 | /sbin/service xinetd reload &>/dev/null || : | /sbin/service xinetd reload &>/dev/null || : |
24 | /sbin/service httpd reload &>/dev/null || : | ||
24 | 25 | fi | fi |
25 | 26 | ||
26 | 27 | %postun | %postun |
... | ... | rm -rf ${RPM_BUILD_ROOT} | |
50 | 51 | %dir /etc/@PRJ@ | %dir /etc/@PRJ@ |
51 | 52 | %config(noreplace) /etc/@PRJ@/config.php | %config(noreplace) /etc/@PRJ@/config.php |
52 | 53 | /etc/@PRJ@/config.php.sample | /etc/@PRJ@/config.php.sample |
53 | %config /etc/cron.d/rocketgit | ||
54 | %config(noreplace) /etc/cron.d/rocketgit | ||
54 | 55 | %config(noreplace) /etc/xinetd.d/rocketgit | %config(noreplace) /etc/xinetd.d/rocketgit |
55 | 56 | %config(noreplace) /etc/httpd/conf.d/rocketgit.conf | %config(noreplace) /etc/httpd/conf.d/rocketgit.conf |
56 | 57 | %attr(0700,rocketgit,rocketgit) %dir /var/run/@PRJ@ | %attr(0700,rocketgit,rocketgit) %dir /var/run/@PRJ@ |
File root/index.php changed (mode: 100644) (index 54189af..3d2a92b) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL); | error_reporting(E_ALL); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | //phpinfo(); | //phpinfo(); |
4 | 5 | ||
5 | 6 | $_s = microtime(TRUE); | $_s = microtime(TRUE); |
File samples/config.php changed (mode: 100644) (index a7548de..38105f3) | |||
... | ... | $rg_ssh_paras = "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty | |
37 | 37 | // Random key that will be used for encription of the password for better security | // Random key that will be used for encription of the password for better security |
38 | 38 | $rg_pass_key = "reigjmn9483jfisendfhwefhefhesfuhfskhjukhtw4khfwkur"; | $rg_pass_key = "reigjmn9483jfisendfhwefhefhesfuhfskhjukhtw4khfwkur"; |
39 | 39 | ||
40 | // From what address we will send mails (forgot pass etc.)? | ||
41 | $rg_admin_name = "RocketGit Admin"; | ||
42 | $rg_admin_email = "admin@site.tld"; | ||
43 | |||
40 | 44 | ?> | ?> |
File samples/rg changed (mode: 100644) (index c837a42..3d45693) | |||
... | ... | service git | |
10 | 10 | wait = no | wait = no |
11 | 11 | user = rocketgit | user = rocketgit |
12 | 12 | server = /usr/bin/php | server = /usr/bin/php |
13 | server_args = /usr/share/rocketgit/scripts/ssh.php | ||
13 | server_args = /usr/share/rocketgit/scripts/remote.php | ||
14 | 14 | log_on_failure += USERID | log_on_failure += USERID |
15 | 15 | } | } |
File samples/rg.conf changed (mode: 100644) (index 48733a5..c90f9b5) | |||
1 | 1 | # This is the apache configuration file for RocketGit | # This is the apache configuration file for RocketGit |
2 | 2 | ||
3 | 3 | <VirtualHost *:80> | <VirtualHost *:80> |
4 | ServerName rg.embedromix.ro | ||
4 | ServerName rg.domain.tld | ||
5 | 5 | ServerAlias rg | ServerAlias rg |
6 | 6 | DocumentRoot /usr/share/rocketgit/root/ | DocumentRoot /usr/share/rocketgit/root/ |
7 | |||
7 | ErrorLog logs/rocketgit-error_log | ||
8 | CustomLog logs/rocketgit-access_log common | ||
8 | 9 | <Directory "/usr/share/rocketgit/root"> | <Directory "/usr/share/rocketgit/root"> |
9 | 10 | AllowOverride All | AllowOverride All |
10 | 11 | Order allow,deny | Order allow,deny |
File scripts/cron.php changed (mode: 100644) (index ecbfc7f..fd64f31) | |||
... | ... | if (date("H") == 0) { | |
41 | 41 | while (($row = rg_sql_fetch_array($res))) { | while (($row = rg_sql_fetch_array($res))) { |
42 | 42 | rg_log("Processing repository [" . $row['name'] . "]..."); | rg_log("Processing repository [" . $row['name'] . "]..."); |
43 | 43 | $repo_path = rg_repo_name2base($row['name']) . $row['name'] . ".git"; | $repo_path = rg_repo_name2base($row['name']) . $row['name'] . ".git"; |
44 | $disk_mb = rg_repo_disk_mb($repo_path); | ||
45 | $sql = "UPDATE repos SET disk_mb = $disk_mb" | ||
44 | $disk_used_mb = rg_repo_disk_mb($repo_path); | ||
45 | $sql = "UPDATE repos SET disk_used_mb = $disk_used_mb" | ||
46 | 46 | . " WHERE repo_id = " . $row['repo_id']; | . " WHERE repo_id = " . $row['repo_id']; |
47 | 47 | $res2 = rg_sql_query($db, $sql); | $res2 = rg_sql_query($db, $sql); |
48 | 48 | if ($res2 === FALSE) { | if ($res2 === FALSE) { |
File scripts/q.php changed (mode: 100644) (index 8ec6388..5ccf0c7) | |||
... | ... | while ($runs-- > 0) { | |
81 | 81 | } | } |
82 | 82 | } | } |
83 | 83 | } | } |
84 | |||
85 | rg_log("Make hooks links..."); | ||
86 | $_dir = @readlink($dst . "/hooks"); | ||
87 | if (strcmp($_dir, $rg_scripts . "/hooks") != 0) { | ||
88 | rg_log("\thooks is not a link to scripts one, make it..."); | ||
89 | @rg_rmdir($dst . "/hooks"); | ||
90 | symlink($rg_scripts . "/hooks", $dst . "/"); | ||
91 | } | ||
92 | 84 | } | } |
93 | 85 | rg_sql_free_result($res); | rg_sql_free_result($res); |
94 | 86 |
File scripts/remote.php renamed from scripts/ssh.php (similarity 98%) (mode: 100644) (index 9f9e45d..04fa37b) | |||
... | ... | require_once($INC . "/log.inc.php"); | |
13 | 13 | require_once($INC . "/db.inc.php"); | require_once($INC . "/db.inc.php"); |
14 | 14 | require_once($INC . "/repo.inc.php"); | require_once($INC . "/repo.inc.php"); |
15 | 15 | ||
16 | rg_log_set_file("/var/log/rocketgit/ssh.log"); | ||
16 | rg_log_set_file("/var/log/rocketgit/remote.log"); | ||
17 | 17 | ||
18 | 18 | $rg_sql_debug = $rg_db_debug; | $rg_sql_debug = $rg_db_debug; |
19 | 19 |
File tests/Makefile changed (mode: 100644) (index 4f735a9..6981152) | |||
1 | tests := util db keys repo rights state user | ||
1 | tests := util db keys repo rights state user git | ||
2 | 2 | .PHONY: $(tests) | .PHONY: $(tests) |
3 | 3 | ||
4 | 4 | all: $(tests) | all: $(tests) |
... | ... | state: | |
23 | 23 | ||
24 | 24 | user: | user: |
25 | 25 | php user.php | php user.php |
26 | |||
27 | git: | ||
28 | php git.php |
File tests/db.php changed (mode: 100644) (index c83320d..5a4661f) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/db.inc.php"); | require_once($INC . "/db.inc.php"); |
File tests/git.php added (mode: 100644) (index 0000000..603b14e) | |||
1 | <?php | ||
2 | error_reporting(E_ALL | E_STRICT); | ||
3 | ini_set("track_errors", "On"); | ||
4 | |||
5 | $INC = "../inc"; | ||
6 | require_once($INC . "/git.inc.php"); | ||
7 | |||
8 | rg_log_set_file("git.log"); | ||
9 | |||
10 | $rg_scripts = "/usr/share/rocketgit"; | ||
11 | |||
12 | // check if git-init works | ||
13 | $r = rg_git_init("git.tmp"); | ||
14 | if ($r !== TRUE) { | ||
15 | echo "Cannot run rg_git_init (" . rg_git_error() . ")!\n"; | ||
16 | exit(1); | ||
17 | } | ||
18 | system("rm -rf git.tmp"); | ||
19 | |||
20 | |||
21 | echo "OK\n"; | ||
22 | ?> |
File tests/keys.php changed (mode: 100644) (index ecdb581..cda4317) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/keys.inc.php"); | require_once($INC . "/keys.inc.php"); |
... | ... | if ($c === FALSE) { | |
55 | 56 | echo "Cannot regenerate file: " . rg_keys_error() . "!\n"; | echo "Cannot regenerate file: " . rg_keys_error() . "!\n"; |
56 | 57 | exit(1); | exit(1); |
57 | 58 | } | } |
58 | $e = "command=\"/usr/bin/php " . $rg_scripts . "/ssh.php 1\"," . $rg_ssh_paras . " aaa 'bbb' first_key\n" | ||
59 | . "command=\"/usr/bin/php " . $rg_scripts . "/ssh.php 2\"," . $rg_ssh_paras . " aaa 'bbb' second_key\n"; | ||
59 | $e = "command=\"/usr/bin/php " . $rg_scripts . "/remote.php 1\"," . $rg_ssh_paras . " aaa 'bbb' first_key\n" | ||
60 | . "command=\"/usr/bin/php " . $rg_scripts . "/remote.php 2\"," . $rg_ssh_paras . " aaa 'bbb' second_key\n"; | ||
60 | 61 | if (strcmp($c, $e) != 0) { | if (strcmp($c, $e) != 0) { |
61 | 62 | echo "Generated file does not seems OK\n"; | echo "Generated file does not seems OK\n"; |
62 | 63 | exit(1); | exit(1); |
File tests/repo.php changed (mode: 100644) (index 11363db..4c73d48) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/repo.inc.php"); | require_once($INC . "/repo.inc.php"); |
File tests/rights.php changed (mode: 100644) (index 8917b72..7afbac0) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/rights.inc.php"); | require_once($INC . "/rights.inc.php"); |
... | ... | if (strcmp($r, $e) != 0) { | |
30 | 31 | exit(1); | exit(1); |
31 | 32 | } | } |
32 | 33 | ||
34 | rg_log("testing mask..."); | ||
35 | $a = "ABCDE"; $mask = "AEZ"; $e = "AE"; | ||
36 | $r = rg_rights_mask($a, $mask); | ||
37 | if (strcmp($e, $e) != 0) { | ||
38 | echo "mask is not working right [$r] != [$e]!\n"; | ||
39 | exit(1); | ||
40 | } | ||
41 | |||
33 | 42 | echo "rights: OK\n"; | echo "rights: OK\n"; |
34 | 43 | ?> | ?> |
File tests/state.php changed (mode: 100644) (index 6a77217..f48c70e) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/log.inc.php"); | require_once($INC . "/log.inc.php"); |
File tests/user.php changed (mode: 100644) (index 585cd32..d6387be) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/user.inc.php"); | require_once($INC . "/user.inc.php"); |
... | ... | if ($r === FALSE) { | |
26 | 27 | } | } |
27 | 28 | ||
28 | 29 | // add user | // add user |
29 | $r = rg_user_edit($db, 0, "userA", "rg@localhost", "pass1", 1, 100, "C"); | ||
30 | $r = rg_user_edit($db, 0, "userA", "rg@localhost", "pass1", 1, 100, "C", 3600); | ||
30 | 31 | if ($r !== TRUE) { | if ($r !== TRUE) { |
31 | 32 | echo "Cannot add user (" . rg_user_error() . ")!\n"; | echo "Cannot add user (" . rg_user_error() . ")!\n"; |
32 | 33 | exit(1); | exit(1); |
... | ... | $salt = $_ui['salt']; | |
48 | 49 | $pass = $_ui['pass']; | $pass = $_ui['pass']; |
49 | 50 | ||
50 | 51 | // edit user - empty pass | // edit user - empty pass |
51 | $r = rg_user_edit($db, $uid, "userA", "rg@localhost", "", 1, 100, "C"); | ||
52 | $r = rg_user_edit($db, $uid, "userA", "rg@localhost", "", 1, 100, "C", 3600); | ||
52 | 53 | if ($r !== TRUE) { | if ($r !== TRUE) { |
53 | 54 | echo "Cannot edit user with empty pass (" . rg_user_error() . ")!\n"; | echo "Cannot edit user with empty pass (" . rg_user_error() . ")!\n"; |
54 | 55 | exit(1); | exit(1); |
... | ... | if (strcmp($pass, $_ui['pass']) != 0) { | |
69 | 70 | } | } |
70 | 71 | ||
71 | 72 | // edit user - no empty pass | // edit user - no empty pass |
72 | $r = rg_user_edit($db, $uid, "userA", "rg@localhost", "pass2", 1, 100, "C"); | ||
73 | $r = rg_user_edit($db, $uid, "userA", "rg@localhost", "pass2", 1, 100, "C", 3600); | ||
73 | 74 | if ($r !== TRUE) { | if ($r !== TRUE) { |
74 | 75 | echo "Cannot edit user with not empty pass (" . rg_user_error() . ")!\n"; | echo "Cannot edit user with not empty pass (" . rg_user_error() . ")!\n"; |
75 | 76 | exit(1); | exit(1); |
File tests/util.php changed (mode: 100644) (index 776327b..d1b73e1) | |||
1 | 1 | <?php | <?php |
2 | 2 | error_reporting(E_ALL | E_STRICT); | error_reporting(E_ALL | E_STRICT); |
3 | ini_set("track_errors", "On"); | ||
3 | 4 | ||
4 | 5 | $INC = "../inc"; | $INC = "../inc"; |
5 | 6 | require_once($INC . "/util.inc.php"); | require_once($INC . "/util.inc.php"); |
7 | require_once($INC . "/log.inc.php"); | ||
8 | |||
9 | rg_log_set_file("util.log"); | ||
6 | 10 | ||
7 | 11 | $id = rg_id(16); | $id = rg_id(16); |
8 | 12 | if (strlen($id) != 16) { | if (strlen($id) != 16) { |
... | ... | if (strlen($id) != 16) { | |
10 | 14 | exit(1); | exit(1); |
11 | 15 | } | } |
12 | 16 | ||
17 | @mkdir("util.tmp", 0700, TRUE); | ||
18 | file_put_contents("util.tmp/file1", "aaa"); | ||
19 | file_put_contents("util.tmp/file2", "bbb"); | ||
20 | $r = rg_rmdir("util.tmp"); | ||
21 | if ($r !== TRUE) { | ||
22 | echo "Cannot delete dir!\n"; | ||
23 | exit(1); | ||
24 | } | ||
25 | |||
13 | 26 | echo "util: OK\n"; | echo "util: OK\n"; |
14 | 27 | ?> | ?> |