Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: C daemon #1084

Merged
merged 163 commits into from
Jun 12, 2024
Merged
Show file tree
Hide file tree
Changes from 162 commits
Commits
Show all changes
163 commits
Select commit Hold shift + click to select a range
18f9fdf
feat: add argparsing
XavierChanth Feb 2, 2024
6cb1757
feat: checkin progress
XavierChanth Feb 3, 2024
41d8a73
feat: add pkam auth
XavierChanth Feb 3, 2024
787e6da
feat: checking progress with sshnpd
XavierChanth Feb 3, 2024
fb7b4d6
chore: restructure c packages
XavierChanth Feb 5, 2024
531e364
chore: remove 'h' abbr from HELP flag
XavierChanth Feb 6, 2024
bd59576
feat: checkin socket-connector progress
XavierChanth Feb 6, 2024
4eab591
feat: checkin sshnpd progress
XavierChanth Feb 6, 2024
ca7aa70
feat: demoable socket_connector
XavierChanth Feb 7, 2024
f31918c
chore: disable --bind-local-port for now
XavierChanth Feb 7, 2024
5e890b4
fix: stop srv from dropping idle connections
XavierChanth Feb 7, 2024
6feaa92
feat: checkin aes_ctr tranformer for c srv
XavierChanth Feb 7, 2024
af2fd30
feat: checkin progress
XavierChanth Feb 8, 2024
bd01c61
fix: weird counting behaviour of argparse lib
XavierChanth Feb 9, 2024
37312b4
feat: rv-auth working
XavierChanth Feb 9, 2024
ad3d553
chore: remove commented free calls
XavierChanth Feb 9, 2024
6230d24
fix: make sure to set the encrypter/decrypter in the side_hints
XavierChanth Feb 9, 2024
3f07dde
fix: transformer allocation
XavierChanth Feb 9, 2024
db4c355
chore: remove temp tool
XavierChanth Feb 9, 2024
a1a8d78
chore: cleanup logging
XavierChanth Feb 9, 2024
e608e3a
fix: found the issue with stream transformation
XavierChanth Feb 9, 2024
94902b7
chore: merge some files for easier navigation
XavierChanth Feb 9, 2024
1ceaf18
fix: make sure srv cleans itself up
XavierChanth Feb 9, 2024
47560f7
feat: checkin code
XavierChanth Feb 9, 2024
8068264
chore: don't allocate the net context on the heap
XavierChanth Feb 9, 2024
92d7f85
docs: not some important design decisions
XavierChanth Feb 9, 2024
052febe
chore: cleanup
XavierChanth Feb 9, 2024
1172686
style: adopt .clang-format style file
XavierChanth Feb 13, 2024
5865dc4
chore: simplify clang formatting
XavierChanth Feb 13, 2024
ce90b1c
style: use new formatting style
XavierChanth Feb 13, 2024
d3bee64
fix: srv concurrency
XavierChanth Feb 14, 2024
005e2fd
Merge branch 'trunk' into c_daemon
XavierChanth Feb 14, 2024
fff8ad4
docs: document side.h
XavierChanth Feb 14, 2024
da545cd
docs: add documentation for all headers in srv
XavierChanth Feb 14, 2024
ace4d04
feat: checkin tool script bootstrap
XavierChanth Feb 15, 2024
c653b7d
chore: disable encrypt traffic in srv for now
XavierChanth Feb 15, 2024
da5d275
feat: parse for multiple manager atsigns
XavierChanth Feb 15, 2024
85dc117
chore: improve the robustness of threading in srv
XavierChanth Feb 15, 2024
72bfc67
feat: heartbeat working
XavierChanth Feb 16, 2024
876c019
chore: debugging progress
XavierChanth Feb 16, 2024
fe748b4
feat: working encrypt on srv
XavierChanth Feb 20, 2024
75f6ae3
chore: retry sending socket data when a partial send occurs
XavierChanth Feb 29, 2024
3d0aa44
Merge branch 'trunk' into c_daemon
XavierChanth May 3, 2024
9fcfb60
chore(wip): c_daemon new atsdk uptake
XavierChanth May 4, 2024
06c2ba1
feat: More robust downloading
cpswan May 3, 2024
5494751
feat: Check for unzip and tar
cpswan May 3, 2024
baeea41
chore: ignore generated development binaries
XavierChanth Apr 26, 2024
0308f16
feat: sshpublickey permissions
XavierChanth Apr 26, 2024
96ee83c
chore: cleanup sshpublickey formatting
XavierChanth Apr 26, 2024
429ef4c
chore: ignore compile_commands.json
XavierChanth May 6, 2024
186c25b
Merge branch 'trunk' into c_daemon
XavierChanth May 6, 2024
7605feb
chore: build maintenance
XavierChanth May 6, 2024
b803578
Merge branch 'trunk' into c_daemon
XavierChanth May 7, 2024
56ca0a4
feat: add --local-host flag to srv
XavierChanth May 7, 2024
5130502
chore: simplify arg defaults
XavierChanth May 7, 2024
9f2f80a
feat: checkpoint
XavierChanth May 10, 2024
c4ecd79
chore: checkpoint for atlogger bug
XavierChanth May 10, 2024
1b719ea
feat: ping request working
XavierChanth May 11, 2024
7c8214e
feat: add sshpublickey type
XavierChanth May 14, 2024
fcc8b86
Merge branch 'trunk' into c_daemon
XavierChanth May 14, 2024
1ff8d98
feat: add heartbeat (noop) to worker atclient
XavierChanth May 15, 2024
9f39e5f
Merge branch 'trunk' into c_daemon
XavierChanth May 15, 2024
accda4c
chore: checkin mid-ssh request progress
XavierChanth May 15, 2024
58d1ed5
feat: handle username key put/deletes on startup
XavierChanth May 15, 2024
6271cf8
fix: username key now users username value from environment
XavierChanth May 15, 2024
6a6a8e0
WIP
XavierChanth May 21, 2024
cb47e25
chore: debugging for c-daemon
XavierChanth May 22, 2024
6edef5b
Merge branch 'trunk' into c_daemon
XavierChanth May 22, 2024
8b8f596
chore: cleanup logging
XavierChanth May 22, 2024
23278e4
fix: solved a few more bugs
XavierChanth May 23, 2024
d18f174
feat: v4 mvp of c_daemon
XavierChanth May 23, 2024
adac2ed
chore: remove environment logs which contain sensitive info
XavierChanth May 23, 2024
11bcae5
feat: v5 functionality support
XavierChanth May 23, 2024
cc1bfc8
chore: remove logs
XavierChanth May 24, 2024
d12abd7
chore: srv-lib build in sshnpd
XavierChanth May 24, 2024
be4d1f0
chore: add srv-lib to sshnpd build
XavierChanth May 24, 2024
d265af9
feat: sshnpd as single binary
XavierChanth May 24, 2024
3d7a2ba
Merge branch 'trunk' into c_daemon
XavierChanth May 24, 2024
e27df3c
chore: build c sshnpd against a git ref
XavierChanth May 28, 2024
a2bb563
chore: remove accidentally added temporary keys
XavierChanth May 28, 2024
6c6f8a1
feat: add hidden args by hiding entries with a null description
XavierChanth May 28, 2024
af37d26
chore: fixes for end2end tests
XavierChanth May 28, 2024
6c79d04
chore(WIP): end 2 end tests for c
XavierChanth May 28, 2024
632b9f7
docs: add a brief summary of c sshnpd status
XavierChanth May 29, 2024
8c56120
Merge branch 'trunk' into c_daemon
XavierChanth May 29, 2024
33e3ff2
fix: macos thing
XavierChanth May 29, 2024
952b08b
chore: better sshpublickey logging
XavierChanth May 29, 2024
3a09ea6
chore: cleanup file handling
XavierChanth May 29, 2024
25479f7
chore: trailing new line in log message
XavierChanth May 29, 2024
1eabbba
chore: add c to description for versions
XavierChanth May 29, 2024
e6fecc4
chore: separate test list with ";"
XavierChanth May 29, 2024
7febd36
test: fix: ensure the cmake build dir exists
gkc May 30, 2024
1ab80a1
fix: add explicit stddef.h include
XavierChanth May 30, 2024
894a478
chore: more imports
XavierChanth May 30, 2024
6a152b6
chore: more explicit headers
XavierChanth May 30, 2024
111df95
chore: use atclient long_strlen instead of separate one for sshnpd
XavierChanth May 30, 2024
b00b20b
fix: remove utils.c from cmakelists
XavierChanth May 30, 2024
f13e807
fix: remove unused header
XavierChanth May 30, 2024
6ced18b
ci(temp): run only c:current daemon
XavierChanth May 30, 2024
7ab6ff0
chore: update atsdk
XavierChanth May 30, 2024
8bc6167
test: temporarily disable removal of output files so that I can view …
gkc May 31, 2024
88657b9
test: uncommenting dart daemons for full test run to attempt to get f…
gkc May 31, 2024
83ecf63
test: e2e_all main.sh: if start_daemons fails, then call stop_daemons…
gkc May 31, 2024
47fa234
test: just run with C daemon
gkc May 31, 2024
dd0fc0a
Merge remote-tracking branch 'origin/trunk' into c_daemon
gkc May 31, 2024
732e58c
test: uncommenting dart daemons for full test run to reproduce pkam f…
gkc May 31, 2024
d16cfd8
test: fix start_daemons.sh so it resets the 'extraFlags' variable for…
gkc May 31, 2024
42771dd
chore: use timestamps in atlogger
XavierChanth May 31, 2024
3c5891b
fix: snake case validation for device name
Xlin123 May 30, 2024
56ead07
fix: can start with underscore (oops)
Xlin123 May 30, 2024
04d516d
chore: cleanup
Xlin123 May 30, 2024
227f5ea
fix: max 15 chars
Xlin123 May 30, 2024
eb027f3
build(deps): bump github/codeql-action in the github-actions group
dependabot[bot] Jun 3, 2024
db1728a
build(deps): bump the pub group across 1 directory with 2 updates
dependabot[bot] Jun 3, 2024
f53b4cb
chore: WIP
XavierChanth Jun 3, 2024
6fb8541
fix: includes for linux
XavierChanth Jun 3, 2024
d2ca744
docs: add details about cc vs clang compile flags
XavierChanth Jun 4, 2024
1741f38
chore: update atsdk version
XavierChanth Jun 4, 2024
da92ca7
chore: fix memory allocations for handle_ssh_request
XavierChanth Jun 4, 2024
7a9e723
fix: move closing of a pipe to correct location
XavierChanth Jun 4, 2024
0568d95
fix: disable -r test for c daemon
XavierChanth Jun 4, 2024
c39cf14
fix: invert comparison
XavierChanth Jun 4, 2024
b8a35bb
fix: flag tests
XavierChanth Jun 4, 2024
41c1c40
fix: missing quote
XavierChanth Jun 6, 2024
790657b
chore: uptake new changes
XavierChanth Jun 6, 2024
76eee06
Merge branch 'trunk' into c_daemon
XavierChanth Jun 6, 2024
cc8343b
fix: missing quotes
XavierChanth Jun 6, 2024
2c68576
docs: Note about statically linking cjson
cpswan Jun 7, 2024
33f1390
fix: help text for po
XavierChanth Jun 7, 2024
fa3fc1e
chore: remove valgrind output
XavierChanth Jun 7, 2024
0d9b346
chore: ignore valgrind files
XavierChanth Jun 7, 2024
67e5e05
chore: better atclient lock management
XavierChanth Jun 7, 2024
1a98b2b
feat(wip): reconnect on network drop
XavierChanth Jun 7, 2024
4554f35
Merge branch 'trunk' into c_daemon
XavierChanth Jun 7, 2024
d75d484
test: fix v4_dart_inline and v4_openssh_print scripts to get daemonVe…
gkc Jun 9, 2024
9b242fc
test: fix: add client version check to v5 tests when testing against …
gkc Jun 9, 2024
01a41be
chore: additional logs
XavierChanth Jun 10, 2024
0eec37d
fix: use new enable_hooks function
XavierChanth Jun 10, 2024
f8979a3
chore: more logs
XavierChanth Jun 10, 2024
4d9c626
chore: even more logs
XavierChanth Jun 10, 2024
bae5f17
chore: use clang to build e2e tests
XavierChanth Jun 10, 2024
1417dc1
chore: test cc for \r
XavierChanth Jun 10, 2024
a4e062f
chore: use new hook name
XavierChanth Jun 10, 2024
dd76293
use latest atsdk
XavierChanth Jun 10, 2024
de603a8
feat: network connectivity
XavierChanth Jun 10, 2024
1ac2da8
chore: use latest trunk
XavierChanth Jun 11, 2024
15a2e23
chore: more accurate log notation
XavierChanth Jun 11, 2024
0ffe536
Merge branch 'trunk' into c_daemon
XavierChanth Jun 11, 2024
6db4849
fix: allocate space for null-terminator
XavierChanth Jun 11, 2024
a65f900
chore: sigint handler and memory cleanup
XavierChanth Jun 11, 2024
70900af
chore: remove printf
XavierChanth Jun 11, 2024
d8a5397
fix: wrong variable
XavierChanth Jun 11, 2024
bbdde3f
chore: remove sshkeygen
XavierChanth Jun 11, 2024
f1da49f
chore: set srv logging level to info
XavierChanth Jun 11, 2024
1635722
docs: note about CJSON's override build shared libs options
XavierChanth Jun 11, 2024
732245c
ci: Workflow and Dockerfile for C sshnpd builds
cpswan Jun 12, 2024
38ea905
build(deps): Pin Debian and add Dockerfile to Dependabot
cpswan Jun 12, 2024
32194ca
chore: more memory cleanup
XavierChanth Jun 12, 2024
93fa2ea
chore: uptake monitor changes
XavierChanth Jun 12, 2024
b196eec
chore: use latest commit of atsdk
XavierChanth Jun 12, 2024
2dcd849
Merge branch 'trunk' into c_daemon
XavierChanth Jun 12, 2024
28c86b5
docs: cc -> gcc correction
XavierChanth Jun 12, 2024
0e5f319
docs: add changelog
XavierChanth Jun 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ updates:
- "*"
- package-ecosystem: "docker"
directories:
- "/packages/c/sshnpd/tools/"
- "/packages/dart/sshnoports/tools/"
- "/tests/end2end_tests/image/"
schedule:
Expand Down
165 changes: 165 additions & 0 deletions .github/workflows/c_release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
name: Release_Automation

on:
push:
tags:
- 'c*.*.*'
workflow_dispatch:
inputs:
main_build_only:
description: "Run non-dockerx builds only"
required: true
default: false
type: boolean

permissions: # added using https://github.com/step-security/secure-repo
contents: read

jobs:
main_build:
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: ./packages/c/sshnpd
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macOS-latest]
# os: [ubuntu-latest, macOS-latest, windows-latest]
include:
- os: ubuntu-latest
output-name: sshnp-linux-x64
ext: ''
bundle: 'shell'
- os: macOS-latest
output-name: sshnp-macos-x64
ext: ''
bundle: 'shell'
# - os: macos-14
# output-name: sshnp-macos-arm64
# ext: ''
# bundle: 'shell'
# - os: windows-latest
# output-name: sshnp-windows-x64
# ext: '.exe'
# bundle: 'windows'
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
# compile binaries
- run: |
cmake -B build -S . -DBUILD_SHARED_LIBS=off -DCMAKE_C_COMPILER=clang
cmake --build build
mkdir tarball
mv build/sshnpd .
# zip the build
- if: ${{ matrix.os == 'macOS-latest' || matrix.os == 'macos-14'}}
run: ditto -c -k --keepParent sshnpd tarball/${{ matrix.output-name }}.zip
- if: ${{ matrix.os == 'ubuntu-latest' }}
run: tar -cvzf tarball/${{ matrix.output-name }}.tgz sshnpd
- if: ${{ matrix.os == 'windows-latest' }}
run: Compress-Archive -Path sshnpd -Destination tarball/${{ matrix.output-name }}.zip
# upload the build
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
with:
name: ${{ matrix.output-name }}_${{ matrix.compiler }}-${{github.ref_name}}-${{github.run_number}}-${{github.run_attempt}}
path: ./packages/c/sshnpd/tarball
if-no-files-found: error

other_build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./packages/c
strategy:
matrix:
platform: [linux/arm/v7, linux/arm64]
# platform: [linux/arm/v7, linux/arm64, linux/riscv64]
include:
- platform: linux/arm/v7
output-name: sshnpd-linux-arm
- platform: linux/arm64
output-name: sshnpd-linux-arm64
# - platform: linux/riscv64
# output-name: sshnpd-linux-riscv64
steps:
- if: ${{ ! inputs.main_build_only }}
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- if: ${{ ! inputs.main_build_only }}
uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0
- if: ${{ ! inputs.main_build_only }}
uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0
- if: ${{ ! inputs.main_build_only }}
run: |
docker buildx build -t cpswan/sshnpdc -f sshnpd/tools/Dockerfile.package \
--platform ${{ matrix.platform }} -o type=tar,dest=bins.tar .
mkdir tarballs
tar -xvf bins.tar -C tarballs
- if: ${{ ! inputs.main_build_only }}
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
with:
name: ${{ matrix.output-name }}-${{github.ref_name}}-${{github.run_number}}-${{github.run_attempt}}
path: ./packages/c/tarballs/${{ matrix.output-name }}.tgz

github-release:
name: >-
Upload artifacts and generate checksums for provenance
needs: [main_build, other_build]
runs-on: ubuntu-latest
outputs:
hashes: ${{ steps.hash.outputs.hashes }}
permissions:
contents: write # IMPORTANT: mandatory for making GitHub Releases
id-token: write # IMPORTANT: mandatory for sigstore
attestations: write
steps:
- name: Download all the tarballs
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7
with:
path: tarballs/
# - name: Generate SBOMs
# run: |
# syft scan file:./packages/dart/sshnoports/pubspec.lock \
# -o 'spdx-json=tarballs/dart_sshnoports_sbom.spdx.json' \
# -o 'cyclonedx-json=tarballs/dart_sshnoports_sbom.cyclonedx.json'
- name: Move packages for signing
run: |
cd tarballs
echo "Before:"
ls -latrR *
mv */*.tgz .
mv */*.zip .
rm -Rf -- */
echo "After:"
ls -latrR *
- name: Generate SHA256 checksums
working-directory: tarballs
run: sha256sum * > checksums.txt
- name: Upload artifacts to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
# Upload to GitHub Release using the `gh` CLI.
# `dist/` contains the built packages, and the
# sigstore-produced signatures and certificates.
run: >-
gh release upload
'${{ github.ref_name }}' tarballs/**
--repo '${{ github.repository }}'
- id: hash
name: Pass artifact hashes for SLSA provenance
working-directory: tarballs
run: |
echo "hashes=$(cat checksums.txt | base64 -w0)" >> "$GITHUB_OUTPUT"
- uses: actions/attest-build-provenance@49df96e17e918a15956db358890b08e61c704919 # v1.2.0
with:
subject-path: 'tarballs/**'

provenance:
needs: [github-release]
permissions:
actions: read # Needed for detection of GitHub Actions environment.
id-token: write # Needed for provenance signing and ID
contents: write # Needed for release uploads
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected] # 5a775b367a56d5bd118a224a811bba288150a563
with:
base64-subjects: "${{ needs.github-release.outputs.hashes }}"
upload-assets: true
41 changes: 32 additions & 9 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
// Put your args to sshnpd in a .env file:
// For example:
// TO="@my_device"
// FROM="@my_client"
// DEVICE="foobardevice"

"version": "0.2.0",
"configurations": [
{
Expand All @@ -22,14 +25,34 @@
"console": "integratedTerminal",
"justMyCode": true,
"envFile": "${workspaceFolder}/.env",
//put your args in a .env
"args": [
"--atsign", "${env:TO}",
"--manager", "${env:FROM}",
"--device", "${env:DEVICE}",
"--atsign",
"${env:TO}",
"--manager",
"${env:FROM}",
"--device",
"${env:DEVICE}",
"-u"
]
},
{
"name": "C: SSHNPD",
"type": "lldb",
"request": "launch",
"program": "packages/c/sshnpd/build/sshnpd",
"preLaunchTask": "BuildSshnpdC",
"envFile": "${workspaceFolder}/.env",
"env": {
"PATH": "${env:PATH}"
},
"args": [
"-s",
"-v",
"-a", "${env:TO}",
"-m", "${env:FROM}",
"-d", "${env:DEVICE}"
],

"cwd": ""
}
]
}
}
4 changes: 4 additions & 0 deletions packages/c/.clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
Language: Cpp # Covers C and C++
BasedOnStyle: LLVM # Added this to ensure a sane set of defaults
ColumnLimit: 120 # LLVM uses 80, but we mostly use 120 at Atsign
7 changes: 7 additions & 0 deletions packages/c/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.cache
build*

compile_commands.json

core
valgrind-out.txt*
38 changes: 38 additions & 0 deletions packages/c/3rdparty/argparse/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

# targets
# -------
# argparse::argparse-static
# argparse::argparse-shared

include(GNUInstallDirs)

set(ARGPARSE_STATIC_LIB argparse-static)
set(ARGPARSE_SHARED_LIB argparse-shared)

set(ARGPARSE_SOURCES
${CMAKE_CURRENT_LIST_DIR}/src/argparse.c
)

set(ARGPARSE_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include)

add_library(${ARGPARSE_STATIC_LIB} STATIC
${ARGPARSE_SOURCES}
)

add_library(${ARGPARSE_SHARED_LIB} SHARED
${ARGPARSE_SOURCES}
)

target_include_directories(${ARGPARSE_STATIC_LIB} PUBLIC
$<BUILD_INTERFACE:${ARGPARSE_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

target_include_directories(${ARGPARSE_SHARED_LIB} PUBLIC
$<BUILD_INTERFACE:${ARGPARSE_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)

add_library(argparse::${ARGPARSE_STATIC_LIB} ALIAS ${ARGPARSE_STATIC_LIB})
add_library(argparse::${ARGPARSE_SHARED_LIB} ALIAS ${ARGPARSE_SHARED_LIB})

6 changes: 6 additions & 0 deletions packages/c/3rdparty/argparse/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# 3rdparty/argparse

> Copyright (c) 2012-2013 Yecheng Fu <[email protected]>

The files within this directory are from the [argparse](https://github.com/cofyc/argparse) project.
Their [license](https://github.com/cofyc/argparse/blob/master/LICENSE) hereby grants any person to redistribute and/or modify this software under the terms of the MIT license.
File renamed without changes.
Loading