Problema con le autorizzazioni quando si tenta di eseguire il comando nell'hook post-commit in SVN


6

Ho un problema noioso che non riesco a risolvere.

Cosa sto cercando di fare?

post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass --submit-as=admin -p --target-groups=reviewers

Va tutto bene quando provo questo da bash loggato come mio utente. La recensione è pubblicata, pubblicata, ecc. ==> Tutte le autorizzazioni e le altre impostazioni varie sono OK.

Cosa succede quando provo questo dal gancio post-commit di SVN?

Le risorse vengono impegnate ma l'operazione svn si blocca - in realtà l'hook post-commit non termina.

Qual è il problema ridotto a?

post-review viene eseguito come l'utente che esegue l'hook post-commit, in questo caso l'utente di www-data Apache. Vale a dire quando eseguo il comando come www-data:

sudo -u www-data post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass! --submit-as=admin -p --target-groups=reviewers -d

Ottengo (nota il parametro -d nel comando post-review - DEBUG):

RBTools 0.4.1
Home = /home/borislav
Password for 'www-data':

È qui che si blocca in attesa dell'inserimento di una password. L'operazione di commit non può essere completata e rimane lì. Ne ho già discusso con i ragazzi del gruppo google di ReviewBoard in questo post .

D'altra parte quando eseguo lo stesso comando con l'output di debug ma come myuser ottengo:

RBTools 0.4.1
Home = /home/borislav
HTTP GETting api/
HTTP GETting http://reviews.example.test/api/info/
Using the new web API
TTP GETting http://reviews.example.test/api/repositories/
HTTP GETting http://reviews.example.test/api/repositories/1/
HTTP GETting http://reviews.example.test/api/repositories/1/info/
HTTP GETting http://reviews.example.test/api/repositories/2/
HTTP GETting http://reviews.example.test/api/repositories/2/info/
HTTP GETting http://reviews.example.test/api/repositories/3/
HTTP GETting http://reviews.example.test/api/repositories/3/info/
HTTP GETting http://reviews.example.test/api/repositories/4/
HTTP GETting http://reviews.example.test/api/repositories/4/info/
Attempting to create review request on http://xxx.xxx.xxx.xxx/svn/testRepo2 for None
Submitting the review request as admin
HTTP POSTing to http://reviews.example.test/api/review-requests/: {'submit_as': 'admin', 'repository': 'http://xxx.xxx.xxx.xxx/svn/testRepo2'}
Review request created
Attempting to set field 'target_groups' to 'reviewers' for review request '22'
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'target_groups': 'reviewers'}
Uploading diff, size: 2316
HTTP POSTing to http://reviews.example.test/api/review-requests/22/diffs/: {'basedir': '/'}
Publishing
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'public': 1}
Review request #22 posted.

http://reviews.example.test/r/22/

Quindi in realtà tutto funziona con la pubblicazione / pubblicazione ecc.

Uno degli sviluppatori di ReveiwBoard ha dichiarato che "Non visualizziamo la stringa" Password per "". Quindi proviene da qualcos'altro. "

Sono sicuro che si tratti di una specie di permesso di esecuzione. Dovrebbe funzionare su Ubuntu Server, quindi pensa a Debian.

Mi chiedevo se avesse qualche connessione con il paradigma "no root root" di Ubuntu.

Non ho provato su un'altra distribuzione Linux, che in realtà non è un'opzione poiché il server SVN è ospitato su Ubuntu Server.

Puoi controllare questa discussione che ho avuto con i ragazzi del gruppo di occhiali di ReviewBoard. Il binario post-revisione si trova in:/usr/local/bin/post-review

Ho provato ad aggiungere le autorizzazioni per i dati www per poter eseguire la post-revisione nel file sudoers, ma senza fortuna.

A quale soluzione puoi pensare?

Grazie in anticipo, Borislav.


Quando ricevi la richiesta di password, prova a eseguire a psper vedere quale processo la sta emettendo.
Scott,

Risposte:


3

La richiesta della password proviene effettivamente da svn, non da post-revisione. post-review chiama il file binario svn per recuperare le modifiche dal repository.

Non vedi la richiesta della password come utente perché hai già autenticato e svn ha memorizzato le tue informazioni di autenticazione. Non l'hai ancora fatto come utente www-data, quindi svn richiede la password.

Il modo più semplice per risolvere questo problema sarebbe quello di utilizzare l'utente www-data e autenticarsi nel repository, in modo che le credenziali vengano memorizzate nella cache.


Sì, sono già giunto a questa conclusione una settimana fa, ma hai ancora ragione. Hai idea di quanto tempo impiega la cache utente locale SVN a scadere?
Borislav Sabev,

Non penso che scada mai. Lo svnbook non menziona nulla al riguardo.
Alan Shutko,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.