Check-in [9f66ed055c]
Not logged in
Overview
Comment:Initial work on the package uploader client. Add procedures to permit programmatically signing package files.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 9f66ed055c20006933fc14990ac20dfb4931e2a4
User & Date: mistachkin on 2016-12-17 05:07:29
Other Links: manifest | tags
Context
2016-12-17
05:31
Add stub file for the package uploader tool. check-in: 6240d4658d user: mistachkin tags: trunk
05:07
Initial work on the package uploader client. Add procedures to permit programmatically signing package files. check-in: 9f66ed055c user: mistachkin tags: trunk
2016-11-15
05:31
Initial work on supporting packages that have multiple historical versions that reside in the same directory. check-in: 6dad700159 user: mistachkin tags: trunk
Changes

Modified client/1.0/neutral/pkgr.eagle from [e66cb55376] to [46ce6d2906].

105
106
107
108
109
110
111













112
113
114
115
116
117
118
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131







+
+
+
+
+
+
+
+
+
+
+
+
+








      proc $procName $procArgs [appendArgs $procPreBody $procBody]

      return [uplevel 1 [list $procName] $args]
    }
  }

  #
  # NOTE: This procedure returns a string argument value, which may contain
  #       spaces, for use with the [exec] command.  The value argument is
  #       the string value to format as an [exec] argument.
  #
  proc formatExecArgument { value } {
    if {[isEagle]} then {
      return [appendArgs \" $value \"]
    } else {
      return $value
    }
  }

  #
  # NOTE: This procedure returns a formatted, possibly version-specific,
  #       package name, for use in logging.  The package argument is the
  #       name of the package.  The version argument is the version of the
  #       package.
  #
  proc formatPackageName { package version } {
364
365
366
367
368
369
370
371

372
373
374
375
376
377
378
379
380
381
382
383
384




















































385
386
387
388
389
390
391
377
378
379
380
381
382
383

384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456







-
+













+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







  #       file to verify.
  #
  # <public>
  proc verifyOpenPgpSignature { fileName } {
    variable openPgpVerifyCommand

    if {[isEagle]} then {
      set fileName [appendArgs \" $fileName \"]
      set fileName [formatExecArgument $fileName]

      if {[catch {
        eval exec -success Success [subst $openPgpVerifyCommand]
      }] == 0} then {
        return true
      }
    } else {
      if {[catch {
        eval exec [subst $openPgpVerifyCommand] 2>@1
      }] == 0} then {
        return true
      }
    }

    return false
  }

  #
  # NOTE: This procedure returns the name of the file containing the OpenPGP
  #       passphrase.  This procedure is only used when creating an OpenPGP
  #       signature.  There are no arguments.
  #
  proc getOpenPgpPassphraseFile {} {
    global env

    if {[info exists env(GPG_PASSPHRASE_FILE)]} then {
      set fileName [file normalize $env(GPG_PASSPHRASE_FILE)]

      if {[file exists $fileName]} then {
        return $fileName
      } else {
        error "cannot sign with OpenPGP: passphrase file does not exist"
      }
    } else {
      error "cannot sign with OpenPGP: passphrase file is not configured"
    }
  }

  #
  # NOTE: This procedure attempts to create an OpenPGP signature for the
  #       specified (named) file.  Non-zero is only returned if the OpenPGP
  #       signature is created successfully.  A script error should not be
  #       raised by this procedure.  The fileName argument must be the fully
  #       qualified path and file name of the file to be signed.
  #
  # <public>
  proc createOpenPgpSignature { fileName } {
    global env
    variable openPgpSignCommand

    if {[isEagle]} then {
      set fileName [formatExecArgument $fileName]

      if {[catch {
        eval exec -success Success [subst $openPgpSignCommand]
      }] == 0} then {
        return true
      }
    } else {
      if {[catch {
        eval exec [subst $openPgpSignCommand] 2>@1
      }] == 0} then {
        return true
      }
    }

    return false
  }

  #
  # NOTE: This procedure attempts to import the OpenPGP keys contained in
  #       the specified (named) file.  Non-zero is only returned if the
402
403
404
405
406
407
408
409

410
411
412
413
414
415
416
467
468
469
470
471
472
473

474
475
476
477
478
479
480
481







-
+







    variable openPgpImportPattern

    if {[string length $varName] > 0} then {
      upvar 1 $varName result
    }

    if {[isEagle]} then {
      set fileName [appendArgs \" $fileName \"]
      set fileName [formatExecArgument $fileName]

      if {[catch {
        eval exec -nocarriagereturns -stdout output -stderr error \
            [subst $openPgpImportCommand]
      } result] == 0} then {
        set result [appendArgs $output $error]
      } else {
1948
1949
1950
1951
1952
1953
1954


















1955
1956
1957
1958
1959
1960
1961
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    #       to the implementation of OpenPGP in use.
    #
    variable openPgpVerifyCommand; # DEFAULT: gpg2 --verify {${fileName}}

    if {![info exists openPgpVerifyCommand]} then {
      set openPgpVerifyCommand {gpg2 --verify {${fileName}}}
    }

    #
    # NOTE: The command to use when creating OpenPGP signatures for the
    #       downloaded package scripts.  This must be configured according
    #       to the implementation of OpenPGP in use.
    #
    variable openPgpSignCommand; # DEFAULT: gpg2 --detach-sign ...

    if {![info exists openPgpSignCommand]} then {
      set openPgpSignCommand ""

      append openPgpSignCommand {gpg2 --detach-sign --armor}

      append openPgpSignCommand \
          { --passphrase-file [formatExecArgument [getOpenPgpPassphraseFile]]}

      append openPgpSignCommand { --batch --yes {${fileName}}}
    }

    #
    # NOTE: Verify that the package script matches the current language
    #       when called from the [package unknown] handler?
    #
    variable strictUnknownLanguage; # DEFAULT: true

Modified client/1.0/neutral/pkgr.eagle.asc from [8833d23a74] to [4f9aea824a].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYKp12AAoJEFAslq9JXcLZRewP/31IxcbUJwHQ3rwf/VfGoy1g
Q0fNGgiq83Vj2PwkIp/+Lq7U+7QJdroydY8vuwHBmfOVvyHhaRLG+5IsRvA9fqXo
2Rr3VeEka14wpWtslUwKihIDZpPkcpa0Vw85YR057XGSgd3fTihJy3KOw9k2jKnn
ljedD/lNqUcS+UloHgdsVzFAlYA5ABiBXGqpwyKNKHDzfQHLl/o0UfMlFXrxRgGN
oiH8zdbDrJfKTyWda/h9ibYxbD4dqDOKaGDX2fHkKgm75y8F8NkloxzAvsMli/Z/
n/XIP2NmPMUZuMNJ9w8k+n/fzLAPeG/2OuxGpbCkV15qilgnpikA/pMZ258TYKur
4mjmVKjH4UBio2UXkGZshaV5iXYmybc+FWVDa3bH24sp0SQBt3395WKh50TFHvr5
m7oPuA9n23nnCSaESs7Jx9fiEMwNX1wxPjnaziFJGm9+hUXjNtAo7Va7YOKjbpEs
koeoj3U7JTwD1M8smoOmhUTJ6yidPe+7+REJPtKL0XU+GYUiW5zcHPyY4q6yspG1
/ZTQtTABA2Rnb5W4fEb9O1nBwglkUQieo/ARok58t5yw8oTmesE4A1PB0AMLsD/g
PjnpnbaYDI6EcuOnABnyjdf7VP4BWGxqemKXfjxZvZZU84oqXVGvR9dAbu7V16iC
oP6mEqanpqQTO13DeLID
=5HMJ
iQIcBAABCAAGBQJYVMeqAAoJEFAslq9JXcLZ7TMP/i1uqLXgToUaI4sFV8hoxPWQ
buaSI3nfNLJvv8jVJAfe7VolYJw9v0FHpeDTcVToVUDlcGy8W561stkgYn96f4tZ
C7jLGhqtv5IpESjXDm/1bf8QoJrLShx74W68/o1ae4uhlpPYxZg5vcSYFNS09h+r
BGNNza0rZS/4elml92cbsfc/h3Qn2A9chu34eiF0TC4zhCknrmU4LKD3yhlqpJWT
cDIGyKUecW+mSXJGltmmJL+IgO+tNwA72q91sJ3ZIsaEFdYMENZkwva9l7LxoK3j
tqJqknv6a8H1V9PKN9c+qUROq0c5+biwhgldfg1JTLD5ah1YcrZNB9idUen/ftf+
QTQnx3nYPLl7fnMiM6S6svWZjSdZ98Fnpu4Jr1F3Im4DSp6wQcILYruGah9ac49Z
XB/yFpiit7ZhoTH1IVNYYQMdqbf/Wb6WBO5q4CxA000C6ANrk2Cm7Xh5wFlTafg3
VsEzRNhOLfu8dO2CaOzTIfRo4QhwDJl9yDauei4sPo0J2FmbPTyMBnBwz/X14Gcv
st5sFAIsryfSx2c3rDpnj8aFHcQLi0DuB8QCR0p4aSKVb2lenmZfcA85PZYD662v
2x/41sP//rajbEz3YjJlnoK19acDwJSU6uFuvLEqklnd7TDFHl1YtnVVD6wvfSxV
F67DBCIaQLgfEMK45lzv
=waFs
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgr.eagle.harpy from [33fe6beb55] to [c814762109].

17
18
19
20
21
22
23
24

25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66




































67
68
17
18
19
20
21
22
23

24
25
26

27
28
29
30




































31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







-
+


-
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>ebae7353-b388-44b3-b0a2-d1db1ec3080b</Id>
  <Id>b26eb0c0-d25c-485f-9228-064fdd1f781a</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-11-15T05:29:58.4012428Z</TimeStamp>
  <TimeStamp>2016-12-17T05:04:57.1298828Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x9559f6017247e3e2</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/1.0/neutral/pkgr.eagle.harpy.asc from [342a1a6138] to [e6c0f2e243].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYKp14AAoJEFAslq9JXcLZSQwQAI4IRB3gPmqEVEZlnuqP73/U
+xELXV/byc3UK8A6V5m90wpRRXRPIJ+4Q0VH7i6+4FRUmCvlLjdCbWDQ+JbZFAjn
+q69jjvV76UA8ZicO+aE5/tFLWfz7SPcuAMw2eTdGV+S5mU+ln9IxByXYVFltG0g
lykbx1LDblvngvXeoRJfAXG/bBnXbBmLQogZeBGsSyPTKykMoa39pE9S2tWiRUB0
dkDIZ1zIYSdx6Fa3LPgKF9fFHAFrjbFDJPn22fbCy3GYmT5QsvfQsUfv5mV1Lg+Q
4EauQandKNgXecRpF9bdvM/XDbqVF7FwneldRsgfNtyw+6V3WWfK00ObxKlIzC00
LFFcWvhgWXEdKV+7gyEHm4EQGikez6J1Wl2M+pawRiMIyUFf2L1elnQRb+3iLRGt
VR/xYpfQ8j4nz4N5E8thjHYYU0yzR6AVeiDji2xOiwp5t74Ivi0qHtNRL0Y7vHBr
sIq+tTdyPNt59Bgt6YeK033H6Z251LaDcm6/3d0hZxHHWhBa99QzUS5wQMVi9Sdz
6i72cpHXbrVecwMFb8zNhT75BrKzoOMf1nx4ZzeLOymcefvhtwK4c1d9Z3+fQgjj
nenCRruHAswFvlR28khNb87L97mZN3XzKS4RkAMsctpSSqk+hU6Bmd2O7d0BiQx+
w05waL/erR6oxTDpCWM8
=QGBE
iQIcBAABCAAGBQJYVMetAAoJEFAslq9JXcLZE/8QAJY8LtO8YUPPhTY+RPAPw7vZ
R5W/eCOJ1Qy185xjLVYeb6V0ULxEAgY7iNw4mAkF7dZl1oQ56Xhao4L2sH4+nsMx
q/BU0Y/Bk0StpHpRvw10bWl/iVo4W2qK07gXepgL9zpI5pl/lJerSJA3LHd6RD8T
Au/2dw6d/N4ozkc3BTZf4PVZCKfLzVdQ1hEbpDTVlWd0fDS9sEywdML/OKgMzvbG
YfJrTwjF8sf3urJDbBolFxV430mdbIbLPyvkUCCiOjC3oJi0766B2Xsz+95fY16y
fMa8T96R2atRPCOolDN5jdIvCkP3VRKlts6OoNZ7nojiS0SsDsREgt5cEFWieXYg
JFf0Ln5wqjAWxRLl/MlZw2qoN4VQKD9OyS/m/lncNQ4udP4/AIeuQIIeJ0e/pjuQ
7jiYm9ZCyBcFT7ncU1gZjp9zQar4hWY1oF79RfiwAhno8Rz1CwAFNGKaJ7nenx+7
/orx8qcDMFZnPh0fsLQJ2f+Z7TTFmLDuYvA8tDHZRWF4RO//+HYec2KZYIay1ZHI
6RiaNzwjNKI2RF9yJUS+6tGhhu1ck2MR5IXuQ9QFLXqke15qwkpMdKUTxu8N2K/L
FToN9rn9WfC6O1TeUGZkYr7q9hgZ7hBCn0iiLikrgafxuSVQ5eQCRyLD+04vn3nX
cXMvYolWIL6QiREGHpsW
=zSis
-----END PGP SIGNATURE-----