Giter Site home page Giter Site logo

janvidar / uhub Goto Github PK

View Code? Open in Web Editor NEW
69.0 69.0 28.0 3.42 MB

A high performance ADC peer to peer message hub.

Home Page: http://www.uhub.org

License: GNU General Public License v3.0

Shell 0.81% Perl 1.52% C 83.05% C++ 12.11% Python 1.21% CMake 1.20% Dockerfile 0.09%

uhub's People

Contributors

bcbnz avatar coilock avatar dennwc avatar felixbrucker avatar janvidar avatar kcchouette avatar klondi avatar makefu avatar marcan avatar mimicmod avatar tehnick avatar tilka avatar xolom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

uhub's Issues

Limit user's reconnection time

[07.10.19] 00:45.29 ] *** Parts: andr1961
[07.10.19] 00:45.29 ] *** Joins: andr1961
[07.10.19] 00:46.18 ] *** Parts: trance[]maniac
[07.10.19] 00:46.18 ] *** Joins: trance[]maniac

To avoid a too fast user's reconnection. It can be monitored by the IP address (and may probably be controlled by antiflood timer).

can't specify users in users.conf

I took the standard Dockerfile and made a docker-compose.yml with the following content:

version: "3"

services:
  uhub:
    image: uhub
    build: ./build/uhub
    volumes:
      - ./conf:/conf
    ports:
      - "411:411"
      - "1511:1511"

Then I made a uhub.conf:

server_port=411
server_bind_addr=any
server_alt_ports = 1511

# The maximum amount of users allowed on the hub.
max_users=100

# If 1, will show a "Powered by uHub/{VERSION}".
show_banner=1

# If enabled then operating system and cpu architecture is part of the banner.
show_banner_sys_info=1

# Allow only registered users on the hub if set to 1.
registered_users_only=1

# A server name and description.
hub_name=Test Hub
hub_description=Powered by uHub

# Set this to 0, and the hub will disconnect everyone
hub_enabled=1

# Access control list (user database)
file_acl=/conf/users.conf

And an ACL:

user_admin      testadm:11admin11

When I want to connect with EiskaltDC++, I get the following messages:

[20:07:54] <Test Hub> Powered by uhub/0.5.1-git-78a7039 on Linux/AMD64
[20:07:54] <Test Hub> Hub is for registered users only
[20:07:54] *  Hub is for registered users only 

What am I doing wrong?

fail build with openssl 1.1.0.f

[ 23%] Building C object CMakeFiles/network.dir/src/network/openssl.c.o
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c: In function 'net_ssl_library_shutdown':
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:94:2: warning: 'ERR_remove_state' is deprecated [-Wdeprecated-declarations]
  ERR_remove_state(0);
  ^~~~~~~~~~~~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
                 from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
                 from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/err.h:248:1: note: declared here
 DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
 ^
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c: In function 'add_io_stats':
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:109:17: error: dereferencing pointer to incomplete type 'BIO {aka struct bio_st}'
  if (handle->bio->num_read > handle->bytes_rx)
                 ^~
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c: In function 'get_ssl_method':
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:131:4: warning: 'TLSv1_method' is deprecated [-Wdeprecated-declarations]
    return TLSv1_method();
    ^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
                 from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
                 from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/ssl.h:1612:1: note: declared here
 DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */
 ^
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:133:4: warning: 'TLSv1_1_method' is deprecated [-Wdeprecated-declarations]
    return TLSv1_1_method();
    ^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
                 from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
                 from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/ssl.h:1618:1: note: declared here
 DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */
 ^
/tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:135:4: warning: 'TLSv1_2_method' is deprecated [-Wdeprecated-declarations]
    return TLSv1_2_method();
    ^~~~~~
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /tmp/makepkg/uhub-git/src/uhub/src/system.h:102,
                 from /tmp/makepkg/uhub-git/src/uhub/src/uhub.h:28,
                 from /tmp/makepkg/uhub-git/src/uhub/src/network/openssl.c:20:
/usr/include/openssl/ssl.h:1624:1: note: declared here
 DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */
 ^
make[2]: *** [CMakeFiles/network.dir/build.make:255: CMakeFiles/network.dir/src/network/openssl.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:331: CMakeFiles/network.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

greetings

!log update error

[21:29] VEOC46ZHWQHG6Z2HBCMFV2ARW5M67TWFSIN3NQY, bobby [84.106.136.89] - update error
[21:30] BYFV4RZJDMPFYYBIARYVMW6MIJQTHAUGVUKEPIQ, MORE_2016 [178.140.161.128] - update error
[21:43] MUCEI5TIPH4XYCOP6VC76JATHRARI7EDXCQ5YQY, Aviatorofff [95.27.250.237] - update error

What does it mean?

Unable to load plugin mod_welcome.so

After instelling uhub (both package and source) it fails to load the mod_welcome.so plugin while sqlite and logging do get loaded. All those files have the same rights on the server and even when giving the files 777 rights the issue remains.

2017-04-13 20:21:05 ERROR: Unable to open file /etc/uhub/users.conf: No such file or directory
2017-04-13 20:21:05 INFO: Starting uhub/0.5.0, listening on :::1511...
2017-04-13 20:21:05 INFO: Loaded plugin: /usr/lib/uhub/mod_auth_sqlite.so: SQLite authentication plugin, version 1.0.
2017-04-13 20:21:05 INFO: Loaded plugin: /usr/lib/uhub/mod_logging.so: Logging plugin, version 1.0.
2017-04-13 20:21:05 ERROR: Unable to load plugin: /usr/lib/uhub/mod_welcome.so - Failed to initialize: Unable to read motd file.
2017-04-13 20:21:05 FATAL: Unable to load plugins.

Compilation problems with libsystemd-*

Compiling from the archlinux aur package gives me the following errors:

-- Checking for one of the modules 'libsystemd-daemon'
CMake Error at /usr/share/cmake-3.4/Modules/FindPkgConfig.cmake:568 (message):
  None of the required 'libsystemd-daemon' found
Call Stack (most recent call first):
  CMakeLists.txt:59 (pkg_search_module)

-- Checking for one of the modules 'libsystemd-journal'
CMake Error at /usr/share/cmake-3.4/Modules/FindPkgConfig.cmake:568 (message):
  None of the required 'libsystemd-journal' found
Call Stack (most recent call first):
  CMakeLists.txt:60 (pkg_search_module)

It seems that libsystemd-daemon and libsystems-journal were merged into libsystemd since version 210.

If i replace the following lines:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2f3941d..1d6c1d3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -56,8 +56,8 @@ endif()

 if (SYSTEMD_SUPPORT)
         INCLUDE(FindPkgConfig)
-        pkg_search_module(SD_DAEMON REQUIRED libsystemd-daemon)
-        pkg_search_module(SD_JOURNAL REQUIRED libsystemd-journal)
+        pkg_search_module(SD_DAEMON REQUIRED libsystemd)
+        pkg_search_module(SD_JOURNAL REQUIRED libsystemd)
 endif()

 if (MSVC)

I can compile without problems.

Как он работает в OpenWRT?

users.conf

#operator "Ник" "Пароль"
#user "Ник" "Пароль"
#admin "Ник" "Пароль"
admin "DCBEELINEKZ" "RAFA"

ERROR: Unknown ACL command on line 4: 'admin "DCBEELINEKZ" "RAFA"'

Insecure password-handling in mod_auth_sqlite

Currently the uhub module mod_auth_sqlite stores all user passwords in plaintext. It would be advisable to use a common hashing scheme such as sha256 and salt to avoid having these passwords clear in the database.

Cheers!

Unable to create any user account.

After initial successfull uHub install ver. 0.5.1 this happened:

motd.txt was missing in etc/uhub - this caused uHub failure to start - i see this is issue already posted.
I did add motd.txt to that folder manually - and this resolved issue.
Users.conf doesn't exist - also reported here.
Then when trying to make an admin account via command line - error table users doesn't exist.
How do i fix that?

Create new release

Hey! It would be fantastic if a new "official" release could be published, the latest release (0.5.0) is from 2014.

Thanks for your work!

Secure C-C connections requests

Client–client secure connections requests should not be broadcasted by the hub (just turn them into regular) if the hub does not have TLS enabled.

That should be made for client TLS version compatibility reasons.

no SSL certificate verify

Hi developers:
We made a large scale security static analysis on several open source projects, and found some mistakes in uhub_0.4.1. In the @src/network/openssl.c:328:

ssize_t net_con_ssl_handshake(struct net_connection* con, enum net_con_ssl_mode ssl_mode, struct ssl_context_handle* ssl_ctx)
  {
        [...]
        else
        {
                handle->ssl = SSL_new(SSL_CTX_new(TLSv1_method()));
                SSL_set_fd(handle->ssl, con->sd);
                handle->bio = SSL_get_rbio(handle->ssl);
                con->ssl = (struct ssl_handle*) handle;
                return net_con_ssl_connect(con);
        }  

You do SSL_connect(ssl) in net_con_ssl_connect(con) and when finish this step,you immedicately start to execute read/write operation without verify certificate,which can lead to MITMattack and cause leakage of sensitive data.We recommand you add verify operation such as SSL_CTX_set_verify or SSL_get_peer_certificate to guarantee the security.We have send the bug report to Ubuntu launchpad,and also inform you of such news.Here are the link:
https://bugs.launchpad.net/ubuntu/+source/uhub/+bug/1677495

Compiling for windows

I was trying to cross compile uhub for windows, but i ended up with the following error:

[ 53%] Linking C executable autotest-bin.exe
libnetwork.a(connection.c.obj):connection.c:(.text+0x868): undefined reference to `__imp_htons'
libnetwork.a(connection.c.obj):connection.c:(.text+0x8dc): undefined reference to `__imp_htons'
libnetwork.a(dnsresolver.c.obj):dnsresolver.c:(.text+0x353): undefined reference to `__imp_getaddrinfo'
libnetwork.a(dnsresolver.c.obj):dnsresolver.c:(.text+0x47b): undefined reference to `__imp_freeaddrinfo'
libnetwork.a(ipcalc.c.obj):ipcalc.c:(.text+0x36b): undefined reference to `__imp_htons'
libnetwork.a(ipcalc.c.obj):ipcalc.c:(.text+0x41d): undefined reference to `__imp_htons'
libnetwork.a(network.c.obj):network.c:(.text+0x78): undefined reference to `__imp_WSAStartup'
libnetwork.a(network.c.obj):network.c:(.text+0xaf): undefined reference to `__imp_WSACleanup'
libnetwork.a(network.c.obj):network.c:(.text+0x114): undefined reference to `__imp_WSACleanup'
libnetwork.a(network.c.obj):network.c:(.text+0x194): undefined reference to `__imp_WSAGetLastError'
libnetwork.a(network.c.obj):network.c:(.text+0x20e): undefined reference to `__imp_setsockopt'
libnetwork.a(network.c.obj):network.c:(.text+0x271): undefined reference to `__imp_getsockopt'
libnetwork.a(network.c.obj):network.c:(.text+0x2d1): undefined reference to `__imp_ioctlsocket'
libnetwork.a(network.c.obj):network.c:(.text+0x51c): undefined reference to `__imp_closesocket'
libnetwork.a(network.c.obj):network.c:(.text+0x561): undefined reference to `__imp_shutdown'
libnetwork.a(network.c.obj):network.c:(.text+0x588): undefined reference to `__imp_shutdown'
libnetwork.a(network.c.obj):network.c:(.text+0x5af): undefined reference to `__imp_shutdown'
libnetwork.a(network.c.obj):network.c:(.text+0x62f): undefined reference to `__imp_accept'
libnetwork.a(network.c.obj):network.c:(.text+0x7e7): undefined reference to `__imp_connect'
libnetwork.a(network.c.obj):network.c:(.text+0x849): undefined reference to `__imp_socket'
libnetwork.a(network.c.obj):network.c:(.text+0x91d): undefined reference to `__imp_socket'
libnetwork.a(network.c.obj):network.c:(.text+0xa7d): undefined reference to `__imp_WSAAddressToStringA'
libnetwork.a(network.c.obj):network.c:(.text+0xb22): undefined reference to `__imp_WSAStringToAddressA'
libnetwork.a(network.c.obj):network.c:(.text+0xbf0): undefined reference to `__imp_getpeername'
libnetwork.a(network.c.obj):network.c:(.text+0xd02): undefined reference to `__imp_getsockname'
libnetwork.a(network.c.obj):network.c:(.text+0xd93): undefined reference to `__imp_recv'
libnetwork.a(network.c.obj):network.c:(.text+0xe02): undefined reference to `__imp_send'
libnetwork.a(network.c.obj):network.c:(.text+0xe66): undefined reference to `__imp_bind'
libnetwork.a(network.c.obj):network.c:(.text+0xeae): undefined reference to `__imp_listen'
libnetwork.a(select.c.obj):select.c:(.text+0x296): undefined reference to `__imp_select'
libnetwork.a(select.c.obj):select.c:(.text+0x339): undefined reference to `__WSAFDIsSet'
libnetwork.a(select.c.obj):select.c:(.text+0x35c): undefined reference to `__WSAFDIsSet'
collect2: error: ld returned 1 exit status
CMakeFiles/autotest-bin.dir/build.make:563: recipe for target 'autotest-bin.exe' failed
make[2]: *** [autotest-bin.exe] Error 1
CMakeFiles/Makefile2:68: recipe for target 'CMakeFiles/autotest-bin.dir/all' failed
make[1]: *** [CMakeFiles/autotest-bin.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

i tried googling, but the only solution i found - including ws2_32 in the target_link_libraries line - is already present. It seems it somehow doesn't find the ws2_32 lib althrough it is present:

find /usr/x86_64-w64-mingw32/ -name "*ws2_32*"
/usr/x86_64-w64-mingw32/lib/libws2_32.a

Thoughts?

Unable to clone repo in Windows due to SQLite remote link in thirdparty folder

The new "de-improved" GH client for WIN is apparently unable to translate remote repo links such as what you have in the thirdparty folder which is a remote junction to your SQLite repo. This makes it currently impossible (from everything I have tried) to simply clone the repo and keep it up to date, rather than manually downloading the master.zip.

If possible since it has not changed in almost a decade and is only a small handful of files, if you could possibly consider just moving those few SQLite files needed into the thirdparty folder it would greatly simplify things. TIA!

'limit_min_hubs' option is missing

There is a need for 'limit_min_hubs' option meaning minimum user/reg/op hubs combined.
Just because H:0/0/1 or H:0/1/0 are always possible and won't work when limit_min_hubs_user = 1

limit_min_share doesn't work correctly

[17:18:28] limit_min_share still works funny
[17:18:45] you should look at the code for that variable :p
[17:22:31] Dj_Offset@work https://github.com/janvidar/uhub/blob/0.3.x-stable/src/core/inf.c#L491
[17:23:45] where is hub_get_min_share defined?
[17:24:00] Dj_Offset@work in hub.c I guess
[17:24:50] Dj_Offset@work it is 1024_1024_hub->config->limit_min_share
[17:25:19] Dj_Offset@work oh
[17:25:21] Dj_Offset@work that might fail
[17:25:49] could it now? :p
[17:26:10] Dj_Offset@work that should be uint64_t n = hub->config->limit_min_share; n _= (1024_1024); return n;
[17:26:36] Dj_Offset@work otherwise limit_max_share could overflow and set a different limit.
[17:26:53] Dj_Offset@work since it is an int (32 bit)
[17:27:23] right, could that be the bug that i'm dealing with here?
[17:27:34] Dj_Offset@work yep, could be
[17:27:50] Dj_Offset@work or it could be in the check_limits function I linked to above.

Clean up repo

Uhub has 22 branches 21 are stalled, and 15 have more dev (see the number of commit in parentheses) than the master one:

  • libevent_work (4)
  • 0.2.x-stable (1)
  • history_on_login (1)
  • visual_studio_2010_work (11)
  • adc_client_adcs_support (12)
  • 0.3.x-stable (13)
  • dynamic_hub_commands (8)
  • command_cleanup (1)
  • gh-pages (1)
  • cmake (1)
  • link_support (2)
  • op_notify (8)
  • writev_support (3)
  • acl/user_self_register_support (3)
  • plugin_rework_2019-01 (2)

Maybe should you remove the 6 others, or are there reasons to keep them?

And maybe should you merge some ready-work of theses branches?

OpenBSD 5.7 / LibreSSL

Built 0.5.0 on OpenBSD 5.7 and then, after experiencing this issue, built current git. No dice.

Couldn't make it work with LibreSSL, with config files and certificate identical to those used on a Linux server.

Server runs but clients can't connect.

Clientside (eiskalt) error looks like: Fail: SSL Error: error:00000001:lib(0):func(0):reason(1) (0, 1).

With TLS disabled, clients can connect just fine. But of course that's not ok in the present world.

valgrind

==4470==
==4470== HEAP SUMMARY:
==4470== in use at exit: 8,316 bytes in 416 blocks
==4470== total heap usage: 528,264 allocs, 527,848 frees, 64,064,295 bytes allocated
==4470==
==4470== 16 bytes in 1 blocks are still reachable in loss record 1 of 3
==4470== at 0x402A17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4470== by 0x40F594B: ??? (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x40F5F21: CRYPTO_malloc (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x416DE5F: sk_new (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x409D5DD: ??? (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x409F6E3: SSL_COMP_get_compression_methods (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x40A4FAD: SSL_library_init (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x80627AD: net_ssl_library_init (in /home/dc/src/uhub/uhub)
==4470== by 0x8063A28: net_initialize (in /home/dc/src/uhub/uhub)
==4470== by 0x804F4E6: main_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804FCEF: main (in /home/dc/src/uhub/uhub)
==4470==
==4470== 20 bytes in 1 blocks are still reachable in loss record 2 of 3
==4470== at 0x402A17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4470== by 0x40F594B: ??? (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x40F5F21: CRYPTO_malloc (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x416DE41: sk_new (in /lib/i386-linux-gnu/libcrypto.so.1.0.0)
==4470== by 0x409D5DD: ??? (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x409F6E3: SSL_COMP_get_compression_methods (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x40A4FAD: SSL_library_init (in /lib/i386-linux-gnu/libssl.so.1.0.0)
==4470== by 0x80627AD: net_ssl_library_init (in /home/dc/src/uhub/uhub)
==4470== by 0x8063A28: net_initialize (in /home/dc/src/uhub/uhub)
==4470== by 0x804F4E6: main_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804FCEF: main (in /home/dc/src/uhub/uhub)
valgrind --leak-check=full --show-leak-kinds=all ./uhub -vvvv

==4470==
==4470== 8,280 bytes in 414 blocks are definitely lost in loss record 3 of 3
==4470== at 0x402A17C: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4470== by 0x8068C87: hub_malloc_zero (in /home/dc/src/uhub/uhub)
==4470== by 0x8066200: net_con_set_timeout (in /home/dc/src/uhub/uhub)
==4470== by 0x8059443: probe_create (in /home/dc/src/uhub/uhub)
==4470== by 0x80528E1: net_on_accept (in /home/dc/src/uhub/uhub)
==4470== by 0x806599A: net_con_callback (in /home/dc/src/uhub/uhub)
==4470== by 0x8064CFB: net_backend_process_epoll (in /home/dc/src/uhub/uhub)
==4470== by 0x806375B: net_backend_process (in /home/dc/src/uhub/uhub)
==4470== by 0x80583CA: hub_event_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804F623: main_loop (in /home/dc/src/uhub/uhub)
==4470== by 0x804FCEF: main (in /home/dc/src/uhub/uhub)
==4470==
==4470== LEAK SUMMARY:
==4470== definitely lost: 8,280 bytes in 414 blocks
==4470== indirectly lost: 0 bytes in 0 blocks
==4470== possibly lost: 0 bytes in 0 blocks
==4470== still reachable: 36 bytes in 2 blocks
==4470== suppressed: 0 bytes in 0 blocks
==4470==
==4470== For counts of detected and suppressed errors, rerun with: -v
==4470== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Lintian warning hyphen-used-as-minus-sign

I: uhub: hyphen-used-as-minus-sign usr/share/man/man1/uhub.1.gz:26
N:
N: This manual page seems to contain a hyphen where a minus sign was
N: intended. By default, "-" chars are interpreted as hyphens (U+2010) by
N: groff, not as minus signs (U+002D). Since options to programs use minus
N: signs (U+002D), this means for example in UTF-8 locales that you cannot
N: cut and paste options, nor search for them easily. The Debian groff
N: package currently forces "-" to be interpreted as a minus sign due to
N: the number of manual pages with this problem, but this is a
N: Debian-specific modification and hopefully eventually can be removed.
N:
N: "-" must be escaped ("-") to be interpreted as minus. If you really
N: intend a hyphen (normally you don't), write it as "(hy" to emphasise
N: that fact. See groff(7) and especially groff_char(7) for details, and
N: also the thread starting with
N: http://lists.debian.org/debian-devel/2003/debian-devel-200303/msg01481.h
N: tml
N:
N: If you use some tool that converts your documentation to groff format,
N: this tag may indicate a bug in the tool. Some tools convert dashes of
N: any kind to hyphens. The safe way of converting dashes is to convert
N: them to "-".
N:
N: Because this error can occur very often, Lintian shows only the first 10
N: occurrences for each man page and give the number of suppressed
N: occurrences. If you want to see all warnings, run Lintian with the
N: -d/--debug option.
N:
N: Refer to /usr/share/doc/groff-base/README.Debian and the groff_char(7)
N: manual page for details.
N:
N: Severity: wishlist, Certainty: possible
N:
N: Check: manpages, Type: binary

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.