2013-07-22 8 views
5

में एक्सेस कंट्रोल सीजीआईटी की सीजीआई लॉन्च होने के बाद मैं सीजीटी को एक्सेस कंट्रोल शुरू करना चाहता हूं। विचार गिटोलाइट में उपलब्ध सभी रिपोर्ड्स को सूचीबद्ध करना होगा, लेकिन उपयोगकर्ता प्रमाणीकरण के आधार पर निर्देशिका सूची को सक्षम/अक्षम करना होगा।सीजीआईटी

मैंने पहले अपाचे cgit cgi निष्पादित हो रहा है अभिगम नियंत्रण पाने में कामयाब रहे:

AllowOverride None 
AuthType Basic 
AuthName "Restricted Files" 
AuthUserFile /var/lib/git_alfonso/passwords 

    Options +ExecCGI 
    Order allow,deny 
    Allow from all 

Alias /cgit.png /var/www/htdocs/cgit/cgit.png 
Alias /cgit.css /var/www/htdocs/cgit/cgit.css 
ScriptAlias /cgit "/var/www/htdocs/cgit/cgit.cgi" 
RewriteRule ^$/[R] 
RewriteRule ^/(.*)$ /cgit.cgi/$1**** 

लेकिन मैं कैसे एक बार में एक ही प्रभाव प्राप्त करने के पता नहीं है रिपॉजिटरीज पथों का उपयोग किया जाता है, मैंने निर्देशिका निर्देश के साथ प्रयास किया और वहां प्रमाणीकरण जोड़ दिया लेकिन एक बार cgit लॉन्च होने के बाद apache http.conf फ़ाइल में बताए गए किसी भी अन्य निर्देश को लागू नहीं करता है।

इसे प्राप्त करने के तरीके पर कोई सुराग?

बहुत पहले से धन्यवाद।

ब्र अल्फोन्सो।

उत्तर

1

मैंने ठीक से किया है कि मेरे cgit config में।

# CGit on @[email protected] 
Listen @[email protected] 
<VirtualHost @[email protected]:@[email protected]> 
ServerName @[email protected] 
ServerAlias @[email protected] 
SetEnv GIT_HTTP_BACKEND "@[email protected]/usr/local/apps/git/libexec/git-core/git-http-backend" 
DocumentRoot @[email protected]/cgit 
Alias /cgit @[email protected]/cgit 
<Directory @[email protected]/cgit> 
    SetEnv [email protected]@/repositories 
    AddHandler cgi-script .cgi .pl 
    DirectoryIndex cgit.pl 

विचार एक कस्टम स्क्रिप्ट cgit.pl (यहाँ एक पर्ल स्क्रिप्ट के साथ रैप cgit.cgi है, लेकिन यदि आप किसी अन्य पटकथा भाषा आप चाहते हैं का उपयोग कर सकते (@ xx @ मूल्यों के लिए टेम्पलेट प्लेसहोल्डर कर रहे हैं)) है, जो होगा:

  • कॉल gitolite
  • केवल प्रदर्शन क्या gitolite
  • से अधिकृत है

आप पूर्ण cgit.pl script here देख सकते हैं।

यह जब आप किसी विशेष रेपो के लिए उपयोग करने के लिए कोशिश कर रहे हैं: चाहिए केवल रेपोस आप को देखने के लिए अधिकृत कर रहे हैं की सूची यह:

if ($request_uri ne "/cgit/" && $request_uri ne "/cgit/cgit.pl/") { 
    (my $repo)=($path_info =~ /\/([^\/]+)/); 
    my $perm = "R"; 
    if ($repo ne "") { 
    my $aperm = access($repo, $user, 'R', 'any'); 
    # my ($aperm, $creator) = &repo_rights($repo); 
    $perm=$aperm; 
    } 
    if ($perm !~ /DENIED/) { 
    system("@[email protected]/cgit/cgit.cgi"); 
    } 
} 

यह वह जगह है जब आप एक रेपो बिना cgit बुला रहे हैं।

my $fname="$user.".timestamp().".tpl"; 
    system("@[email protected]/cgit/cgit.cgi > $fname"); 
    open(INFO, $fname); # Open the file 
    @lines = <INFO>; # Read it into an array 
    close(INFO); 
    unlink($fname); 
    pop(@lines); 
    foreach (@lines) { 
     my $line=$_; 
     (my $repo)=($line =~ /title='([^']+)'/); #' 
     my $perm = "R"; 
     if ($repo ne "") { 
     my $aperm = access($repo, $user, 'R', 'any'); 
     # my ($aperm, $creator) = &repo_rights($repo); 
     $perm=$aperm; 
     } 
     if ($perm !~ /DENIED/) { 
     print $line; 
     } 
    } 
:
कि के लिए, देशी cgit.cgi फोन, और फिर उत्पादन फ़िल्टर करें, एक करने के लिए इसी किसी भी लाइन को हटाने रेपो "अस्वीकृत"