Fossil SCM
Add the new "y" permission letter that gives authority to push unversioned files.
Commit
5d703ba2ad20b6f596d1e070778ccb318bdd9d3f
Parent
8f773f2caac235c…
4 files changed
+1
+1
+5
+2
-2
+1
| --- src/login.c | ||
| +++ src/login.c | ||
| @@ -1122,10 +1122,11 @@ | ||
| 1122 | 1122 | case 'c': p->ApndTkt = 1; break; |
| 1123 | 1123 | case 'q': p->ModTkt = 1; break; |
| 1124 | 1124 | case 't': p->TktFmt = 1; break; |
| 1125 | 1125 | case 'b': p->Attach = 1; break; |
| 1126 | 1126 | case 'x': p->Private = 1; break; |
| 1127 | + case 'y': p->WrUnver = 1; break; | |
| 1127 | 1128 | |
| 1128 | 1129 | /* The "u" privileges is a little different. It recursively |
| 1129 | 1130 | ** inherits all privileges of the user named "reader" */ |
| 1130 | 1131 | case 'u': { |
| 1131 | 1132 | if( (flags & LOGIN_IGNORE_UV)==0 ){ |
| 1132 | 1133 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -1122,10 +1122,11 @@ | |
| 1122 | case 'c': p->ApndTkt = 1; break; |
| 1123 | case 'q': p->ModTkt = 1; break; |
| 1124 | case 't': p->TktFmt = 1; break; |
| 1125 | case 'b': p->Attach = 1; break; |
| 1126 | case 'x': p->Private = 1; break; |
| 1127 | |
| 1128 | /* The "u" privileges is a little different. It recursively |
| 1129 | ** inherits all privileges of the user named "reader" */ |
| 1130 | case 'u': { |
| 1131 | if( (flags & LOGIN_IGNORE_UV)==0 ){ |
| 1132 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -1122,10 +1122,11 @@ | |
| 1122 | case 'c': p->ApndTkt = 1; break; |
| 1123 | case 'q': p->ModTkt = 1; break; |
| 1124 | case 't': p->TktFmt = 1; break; |
| 1125 | case 'b': p->Attach = 1; break; |
| 1126 | case 'x': p->Private = 1; break; |
| 1127 | case 'y': p->WrUnver = 1; break; |
| 1128 | |
| 1129 | /* The "u" privileges is a little different. It recursively |
| 1130 | ** inherits all privileges of the user named "reader" */ |
| 1131 | case 'u': { |
| 1132 | if( (flags & LOGIN_IGNORE_UV)==0 ){ |
| 1133 |
+1
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -91,10 +91,11 @@ | ||
| 91 | 91 | char Attach; /* b: add attachments */ |
| 92 | 92 | char TktFmt; /* t: create new ticket report formats */ |
| 93 | 93 | char RdAddr; /* e: read email addresses or other private data */ |
| 94 | 94 | char Zip; /* z: download zipped artifact via /zip URL */ |
| 95 | 95 | char Private; /* x: can send and receive private content */ |
| 96 | + char WrUnver; /* y: can push unversioned content */ | |
| 96 | 97 | }; |
| 97 | 98 | |
| 98 | 99 | #ifdef FOSSIL_ENABLE_TCL |
| 99 | 100 | /* |
| 100 | 101 | ** All Tcl related context information is in this structure. This structure |
| 101 | 102 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -91,10 +91,11 @@ | |
| 91 | char Attach; /* b: add attachments */ |
| 92 | char TktFmt; /* t: create new ticket report formats */ |
| 93 | char RdAddr; /* e: read email addresses or other private data */ |
| 94 | char Zip; /* z: download zipped artifact via /zip URL */ |
| 95 | char Private; /* x: can send and receive private content */ |
| 96 | }; |
| 97 | |
| 98 | #ifdef FOSSIL_ENABLE_TCL |
| 99 | /* |
| 100 | ** All Tcl related context information is in this structure. This structure |
| 101 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -91,10 +91,11 @@ | |
| 91 | char Attach; /* b: add attachments */ |
| 92 | char TktFmt; /* t: create new ticket report formats */ |
| 93 | char RdAddr; /* e: read email addresses or other private data */ |
| 94 | char Zip; /* z: download zipped artifact via /zip URL */ |
| 95 | char Private; /* x: can send and receive private content */ |
| 96 | char WrUnver; /* y: can push unversioned content */ |
| 97 | }; |
| 98 | |
| 99 | #ifdef FOSSIL_ENABLE_TCL |
| 100 | /* |
| 101 | ** All Tcl related context information is in this structure. This structure |
| 102 |
+5
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -294,10 +294,12 @@ | ||
| 294 | 294 | @ user <tt>developer</tt></td></tr> |
| 295 | 295 | @ <tr><th valign="top">w</th> |
| 296 | 296 | @ <td><i>Write-Tkt:</i> Edit tickets</td></tr> |
| 297 | 297 | @ <tr><th valign="top">x</th> |
| 298 | 298 | @ <td><i>Private:</i> Push and/or pull private branches</td></tr> |
| 299 | + @ <tr><th valign="top">y</th> | |
| 300 | + @ <td><i>Write-Unver:</i> Push unversioned files</td></tr> | |
| 299 | 301 | @ <tr><th valign="top">z</th> |
| 300 | 302 | @ <td><i>Zip download:</i> Download a ZIP archive or tarball</td></tr> |
| 301 | 303 | @ </table> |
| 302 | 304 | } |
| 303 | 305 | |
| @@ -714,10 +716,13 @@ | ||
| 714 | 716 | @ onchange="updateCapabilityString()" /> |
| 715 | 717 | @ Ticket Report%s(B('t'))</label><br /> |
| 716 | 718 | @ <label><input type="checkbox" name="ax"%s(oa['x']) |
| 717 | 719 | @ onchange="updateCapabilityString()" /> |
| 718 | 720 | @ Private%s(B('x'))</label><br /> |
| 721 | + @ <label><input type="checkbox" name="ay"%s(oa['y']) | |
| 722 | + @ onchange="updateCapabilityString()" /> | |
| 723 | + @ Write Unverioned%s(B('y'))</label><br /> | |
| 719 | 724 | @ <label><input type="checkbox" name="az"%s(oa['z']) |
| 720 | 725 | @ onchange="updateCapabilityString()" /> |
| 721 | 726 | @ Download Zip%s(B('z'))</label> |
| 722 | 727 | @ </td></tr> |
| 723 | 728 | @ </table> |
| 724 | 729 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -294,10 +294,12 @@ | |
| 294 | @ user <tt>developer</tt></td></tr> |
| 295 | @ <tr><th valign="top">w</th> |
| 296 | @ <td><i>Write-Tkt:</i> Edit tickets</td></tr> |
| 297 | @ <tr><th valign="top">x</th> |
| 298 | @ <td><i>Private:</i> Push and/or pull private branches</td></tr> |
| 299 | @ <tr><th valign="top">z</th> |
| 300 | @ <td><i>Zip download:</i> Download a ZIP archive or tarball</td></tr> |
| 301 | @ </table> |
| 302 | } |
| 303 | |
| @@ -714,10 +716,13 @@ | |
| 714 | @ onchange="updateCapabilityString()" /> |
| 715 | @ Ticket Report%s(B('t'))</label><br /> |
| 716 | @ <label><input type="checkbox" name="ax"%s(oa['x']) |
| 717 | @ onchange="updateCapabilityString()" /> |
| 718 | @ Private%s(B('x'))</label><br /> |
| 719 | @ <label><input type="checkbox" name="az"%s(oa['z']) |
| 720 | @ onchange="updateCapabilityString()" /> |
| 721 | @ Download Zip%s(B('z'))</label> |
| 722 | @ </td></tr> |
| 723 | @ </table> |
| 724 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -294,10 +294,12 @@ | |
| 294 | @ user <tt>developer</tt></td></tr> |
| 295 | @ <tr><th valign="top">w</th> |
| 296 | @ <td><i>Write-Tkt:</i> Edit tickets</td></tr> |
| 297 | @ <tr><th valign="top">x</th> |
| 298 | @ <td><i>Private:</i> Push and/or pull private branches</td></tr> |
| 299 | @ <tr><th valign="top">y</th> |
| 300 | @ <td><i>Write-Unver:</i> Push unversioned files</td></tr> |
| 301 | @ <tr><th valign="top">z</th> |
| 302 | @ <td><i>Zip download:</i> Download a ZIP archive or tarball</td></tr> |
| 303 | @ </table> |
| 304 | } |
| 305 | |
| @@ -714,10 +716,13 @@ | |
| 716 | @ onchange="updateCapabilityString()" /> |
| 717 | @ Ticket Report%s(B('t'))</label><br /> |
| 718 | @ <label><input type="checkbox" name="ax"%s(oa['x']) |
| 719 | @ onchange="updateCapabilityString()" /> |
| 720 | @ Private%s(B('x'))</label><br /> |
| 721 | @ <label><input type="checkbox" name="ay"%s(oa['y']) |
| 722 | @ onchange="updateCapabilityString()" /> |
| 723 | @ Write Unverioned%s(B('y'))</label><br /> |
| 724 | @ <label><input type="checkbox" name="az"%s(oa['z']) |
| 725 | @ onchange="updateCapabilityString()" /> |
| 726 | @ Download Zip%s(B('z'))</label> |
| 727 | @ </td></tr> |
| 728 | @ </table> |
| 729 |
+2
-2
| --- src/xfer.c | ||
| +++ src/xfer.c | ||
| @@ -1226,11 +1226,11 @@ | ||
| 1226 | 1226 | /* uvfile NAME MTIME HASH SIZE FLAGS \n CONTENT |
| 1227 | 1227 | ** |
| 1228 | 1228 | ** Accept an unversioned file from the client. |
| 1229 | 1229 | */ |
| 1230 | 1230 | if( blob_eq(&xfer.aToken[0], "uvfile") ){ |
| 1231 | - xfer_accept_unversioned_file(&xfer, g.perm.Write); | |
| 1231 | + xfer_accept_unversioned_file(&xfer, g.perm.WrUnver); | |
| 1232 | 1232 | if( blob_size(&xfer.err) ){ |
| 1233 | 1233 | cgi_reset_content(); |
| 1234 | 1234 | @ error %T(blob_str(&xfer.err)) |
| 1235 | 1235 | nErr++; |
| 1236 | 1236 | break; |
| @@ -1518,11 +1518,11 @@ | ||
| 1518 | 1518 | ** The client wants to make sure that unversioned files are all synced. |
| 1519 | 1519 | ** If the HASH does not match, send a complete catalog of |
| 1520 | 1520 | ** "uvigot" cards. |
| 1521 | 1521 | */ |
| 1522 | 1522 | if( blob_eq(&xfer.aToken[1], "uv-hash") && blob_is_uuid(&xfer.aToken[2]) ){ |
| 1523 | - if( g.perm.Read && g.perm.Write ){ | |
| 1523 | + if( g.perm.Read && g.perm.WrUnver ){ | |
| 1524 | 1524 | @ pragma uv-push-ok |
| 1525 | 1525 | send_unversioned_catalog(&xfer); |
| 1526 | 1526 | }else if( g.perm.Read ){ |
| 1527 | 1527 | @ pragma uv-pull-only |
| 1528 | 1528 | send_unversioned_catalog(&xfer); |
| 1529 | 1529 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -1226,11 +1226,11 @@ | |
| 1226 | /* uvfile NAME MTIME HASH SIZE FLAGS \n CONTENT |
| 1227 | ** |
| 1228 | ** Accept an unversioned file from the client. |
| 1229 | */ |
| 1230 | if( blob_eq(&xfer.aToken[0], "uvfile") ){ |
| 1231 | xfer_accept_unversioned_file(&xfer, g.perm.Write); |
| 1232 | if( blob_size(&xfer.err) ){ |
| 1233 | cgi_reset_content(); |
| 1234 | @ error %T(blob_str(&xfer.err)) |
| 1235 | nErr++; |
| 1236 | break; |
| @@ -1518,11 +1518,11 @@ | |
| 1518 | ** The client wants to make sure that unversioned files are all synced. |
| 1519 | ** If the HASH does not match, send a complete catalog of |
| 1520 | ** "uvigot" cards. |
| 1521 | */ |
| 1522 | if( blob_eq(&xfer.aToken[1], "uv-hash") && blob_is_uuid(&xfer.aToken[2]) ){ |
| 1523 | if( g.perm.Read && g.perm.Write ){ |
| 1524 | @ pragma uv-push-ok |
| 1525 | send_unversioned_catalog(&xfer); |
| 1526 | }else if( g.perm.Read ){ |
| 1527 | @ pragma uv-pull-only |
| 1528 | send_unversioned_catalog(&xfer); |
| 1529 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -1226,11 +1226,11 @@ | |
| 1226 | /* uvfile NAME MTIME HASH SIZE FLAGS \n CONTENT |
| 1227 | ** |
| 1228 | ** Accept an unversioned file from the client. |
| 1229 | */ |
| 1230 | if( blob_eq(&xfer.aToken[0], "uvfile") ){ |
| 1231 | xfer_accept_unversioned_file(&xfer, g.perm.WrUnver); |
| 1232 | if( blob_size(&xfer.err) ){ |
| 1233 | cgi_reset_content(); |
| 1234 | @ error %T(blob_str(&xfer.err)) |
| 1235 | nErr++; |
| 1236 | break; |
| @@ -1518,11 +1518,11 @@ | |
| 1518 | ** The client wants to make sure that unversioned files are all synced. |
| 1519 | ** If the HASH does not match, send a complete catalog of |
| 1520 | ** "uvigot" cards. |
| 1521 | */ |
| 1522 | if( blob_eq(&xfer.aToken[1], "uv-hash") && blob_is_uuid(&xfer.aToken[2]) ){ |
| 1523 | if( g.perm.Read && g.perm.WrUnver ){ |
| 1524 | @ pragma uv-push-ok |
| 1525 | send_unversioned_catalog(&xfer); |
| 1526 | }else if( g.perm.Read ){ |
| 1527 | @ pragma uv-pull-only |
| 1528 | send_unversioned_catalog(&xfer); |
| 1529 |