Ausschliessen von Repositories bei WebSVN

hiddenWie schon ein paar mal erwähnt: Websvn ist ein geniales Tool! Es ermöglicht das Browsen von verschiedenen Repositories übers Web mit dem Browser. Manchmal möchte man aber nicht alle Verzeichnisse freigeben und anzeigen.

Ich habe einen Patch erstellt, der eine neue Option in /etc/websvn/config.inc erlaubt: $config->excludeRepository("name");. Diese Option kann mehrfach angegeben werden und alle excludeten Repositories werden nicht mehr dargestellt…

Beispiel:

// Select Repositories to exclude
$config->excludeRepository("Geheime-Codes");
$config->excludeRepository("Jokes");

Und hier der Patch: Websvn exclude Repositories Patch.

Viel Spass… Eine Rückmeldung bei Anwendung würde mich freuen…

Websvn mit Repositories in verschiedenen Verzeichnissen

Websvn in AktionWebsvn kann mehrere Repositories in verschiedenen Unterverzeichnissen darstellen, allerdings muss man sich entscheiden: Alle Repositories aller Unterverzeichnisse aufs mal oder nur Repositories eines einzelnen Unterverzeichnisses.
Bei uns im Betrieb hat jede Abteilung (Informatik, Physik, …) ihre Repositories in eigenen Verzeichnissen auf dem Server. Websvn unterstützt zwar mehrere parentPath und stellt alle SVN-Repositories in diesen Verzeichnissen dar, will man aber auch noch einzelne Ansichten für die Abteilungen machen wird es schwer. Lösung: Der parentPath wird an Hand der URL gesetzt.

Unter Debian kann die Datei /etc/websvn/svn_deb_conf.inc direkt missbraucht werden. In anderen Distributionen muss eventuell am Schluss der Datei config.inc folgendes Codesnippet eingefügt und danach für die Änderungen gebraucht werden:

<?php
if ( file_exists("/etc/websvn/svn_sup_conf.inc") ) {
  include("/etc/websvn/svn_sup_conf.inc");
}
?>

Nun soll an Hand des Pfades der /etc/websvn/svn_deb_conf.inc parentPath gesetzt werden:

/websvn
Alle Repositories
/websvn/informatik
Alle Repositories der Abteilung Informatik
/websvn/physik
Alle Repositories der Abteilung Physik

Dafür muss man in der oben konfigurierten Datei folgendes zum Besten geben (bei mehr Abteilungen einfach intelligent erweitern):

<?php
  $repository=dirname($GLOBALS['HTTP_SERVER_VARS']['PHP_SELF']);
  // echo "::: $repository :::";
  switch($repository) {
    case "/websvn/informatik":
    case "/websvn/physik":
          $reppath="/data/svn/repositories/".substr(dirname($GLOBALS['HTTP_SERVER_VARS']['PHP_SELF']),8)."/"; // "/websvn/" entfernen
          //print "::: $reppath :::"; exit(1);
          $config->parentPath($reppath);
    break;
    default:
        $config->parentPath("/data/svn/repositories/informatik");
        $config->parentPath("/data/svn/repositories/physik");
    break;
  }
?>

Der Apache muss dies natürlich auch noch mitkriegen. Die /websvn/ URL-Teile müssen dort konfiguriert werden (site-available oder .htaccess) und das wärs dann:

# Websvn is installed in /usr/share/websvn
Alias /websvn /usr/share/websvn

Alias /websvn/informatik /usr/share/websvn
Alias /websvn/physik /usr/share/websvn

<Location /websvn>
  # DO FUNKY (AUTHENTICATION) STUFF HERE
  <IfModule mod_php4.c>
    php_flag magic_quotes_gpc Off
    php_flag track_vars On
  </IfModule>
</Location>

Mit Apache 2.2 an einem Windows ADC authentifizieren

Zentrale Accountverwaltung (oder in Managerdeutsch: Single Signon) ist etwas schönes! Der IT-Support kann sich darum kümmern, spontan Änderungen vornehmen und die Websiteverantwortlichen müssen nicht mehr rennen und vergessene Passworte zurücksetzen. Viele Zentrale Verzeichnisse laufen unter Windows mittels ADCs (Active Directory Connector). Der ist so nett und stellt seine Dienste auch als LDAP (Lightweight Directory Access Protocol) zur Verfügung. Der Apache kann darüber (auch unter Linux) authentifizieren mit Basic Authentication, also mit dem Passwortfenster aber ohne PHP und PERL und so…

Benötigt wird das Modul authnz-ldap. Unter Debian kann das eingeschaltet werden mittels:

a2enmod

In einer .htaccess Datei oder in der Site-Konfiguration kann man nun sehr gezielt für Verzeichnisse oder URLs die Authentifizierung einschalten. Hier ein Beispiel:

<location /admin>
                AuthName "LDAP-Authentifizierter Bereich"
                AuthType Basic
                AuthBasicProvider ldap
                AuthLDAPBindDN ldapreader@aden.local
                AuthLDAPBindPassword secretpassword
                AuthLDAPUrl ldap://adc1.aden.local/ou=Accounts,dc=aden,dc=local?sAMAccountName?sub
                AuthzLDAPAuthoritative on
                require ldap-group CN=Angestellte,OU=Berechtigungsgruppen,OU=Gruppen,DC=domain,DC=local
</location>
ldapreader@aden.local:
Ist ein Benutzer mit Leserechten aus der Domäne domain.local
secretpassword:
Ist das Passwort dieses Benutzers.
require:
Gibt an, wer Zugriff hat. ldap-group authentifiziert ganze Gruppen. Es gibt aber auch noch andere Direktiven.

Das Ganze funktioniert natürlich auch für SVN und Websvn Zugriffe über das Web!