aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-09-16 00:51:40 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-09-16 01:28:55 +0530
commit0001fcb586c3ab297cd48c77ddd6f5d40546dac4 (patch)
treecddeb81eba7987e3cc22e8b631a47f8fb1145941
parentc589c1d3956cb9a8655e8555f2e02f14fbca8a2e (diff)
downloadhypervideo-pre-0001fcb586c3ab297cd48c77ddd6f5d40546dac4.tar.lz
hypervideo-pre-0001fcb586c3ab297cd48c77ddd6f5d40546dac4.tar.xz
hypervideo-pre-0001fcb586c3ab297cd48c77ddd6f5d40546dac4.zip
Add option `--netrc-location`
Closes #792, #963
-rw-r--r--.gitignore1
-rw-r--r--README.md12
-rw-r--r--yt_dlp/__init__.py1
-rw-r--r--yt_dlp/extractor/common.py6
-rw-r--r--yt_dlp/options.py4
5 files changed, 17 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index 88a9605f7..bf06c81f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
*.spec
cookies
*cookies.txt
+.netrc
# Downloaded
*.srt
diff --git a/README.md b/README.md
index 8ffb20a8c..a2c1cbd82 100644
--- a/README.md
+++ b/README.md
@@ -695,6 +695,9 @@ Then simply run `make`. You can also run `make yt-dlp` instead to compile only t
out, yt-dlp will ask interactively
-2, --twofactor TWOFACTOR Two-factor authentication code
-n, --netrc Use .netrc authentication data
+ --netrc-location PATH Location of .netrc authentication data;
+ either the path or its containing
+ directory. Defaults to ~/.netrc
--video-password PASSWORD Video password (vimeo, youku)
--ap-mso MSO Adobe Pass multiple-system operator (TV
provider) identifier, use --ap-list-mso for
@@ -923,14 +926,14 @@ You can use `--ignore-config` if you want to disable all configuration files for
### Authentication with `.netrc` file
-You may also want to configure automatic credentials storage for extractors that support authentication (by providing login and password with `--username` and `--password`) in order not to pass credentials as command line arguments on every yt-dlp execution and prevent tracking plain text passwords in the shell command history. You can achieve this using a [`.netrc` file](https://stackoverflow.com/tags/.netrc/info) on a per extractor basis. For that you will need to create a `.netrc` file in your `$HOME` and restrict permissions to read/write by only you:
+You may also want to configure automatic credentials storage for extractors that support authentication (by providing login and password with `--username` and `--password`) in order not to pass credentials as command line arguments on every yt-dlp execution and prevent tracking plain text passwords in the shell command history. You can achieve this using a [`.netrc` file](https://stackoverflow.com/tags/.netrc/info) on a per extractor basis. For that you will need to create a `.netrc` file in `--netrc-location` and restrict permissions to read/write by only you:
```
touch $HOME/.netrc
chmod a-rwx,u+rw $HOME/.netrc
```
After that you can add credentials for an extractor in the following format, where *extractor* is the name of the extractor in lowercase:
```
-machine <extractor> login <login> password <password>
+machine <extractor> login <username> password <password>
```
For example:
```
@@ -939,10 +942,7 @@ machine twitch login my_twitch_account_name password my_twitch_password
```
To activate authentication with the `.netrc` file you should pass `--netrc` to yt-dlp or place it in the [configuration file](#configuration).
-On Windows you may also need to setup the `%HOME%` environment variable manually. For example:
-```
-set HOME=%USERPROFILE%
-```
+The default location of the .netrc file is `$HOME` (`~`) in UNIX. On Windows, it is `%HOME%` if present, `%USERPROFILE%` (generally `C:\Users\<user name>`) or `%HOMEDRIVE%%HOMEPATH%`
# OUTPUT TEMPLATE
diff --git a/yt_dlp/__init__.py b/yt_dlp/__init__.py
index f9a7e2f11..5168ed0f7 100644
--- a/yt_dlp/__init__.py
+++ b/yt_dlp/__init__.py
@@ -575,6 +575,7 @@ def _real_main(argv=None):
ydl_opts = {
'usenetrc': opts.usenetrc,
+ 'netrc_location': opts.netrc_location,
'username': opts.username,
'password': opts.password,
'twofactor': opts.twofactor,
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py
index 54a9dc263..e79684231 100644
--- a/yt_dlp/extractor/common.py
+++ b/yt_dlp/extractor/common.py
@@ -18,6 +18,7 @@ from ..compat import (
compat_cookies_SimpleCookie,
compat_etree_Element,
compat_etree_fromstring,
+ compat_expanduser,
compat_getpass,
compat_http_client,
compat_os_name,
@@ -1166,7 +1167,10 @@ class InfoExtractor(object):
if self.get_param('usenetrc', False):
try:
- info = netrc.netrc().authenticators(netrc_machine)
+ netrc_file = compat_expanduser(self.get_param('netrc_location') or '~')
+ if os.path.isdir(netrc_file):
+ netrc_file = os.path.join(netrc_file, '.netrc')
+ info = netrc.netrc(file=netrc_file).authenticators(netrc_machine)
if info is not None:
username = info[0]
password = info[2]
diff --git a/yt_dlp/options.py b/yt_dlp/options.py
index 2ff0fbfc1..099b151c6 100644
--- a/yt_dlp/options.py
+++ b/yt_dlp/options.py
@@ -479,6 +479,10 @@ def parseOpts(overrideArguments=None):
action='store_true', dest='usenetrc', default=False,
help='Use .netrc authentication data')
authentication.add_option(
+ '--netrc-location',
+ dest='netrc_location', metavar='PATH',
+ help='Location of .netrc authentication data; either the path or its containing directory. Defaults to ~/.netrc')
+ authentication.add_option(
'--video-password',
dest='videopassword', metavar='PASSWORD',
help='Video password (vimeo, youku)')